将项目动态添加到 TableView 导致重复单元格

Dynamically adding item to TableView resulted in repeated cells

我有一个 table 视图正在从 Firebase 数据库动态加载数据。我还有一个添加按钮,允许用户在 table 视图必须更新后在 Firebase 数据库中添加,并再次从 firebase 重新加载数据以及新添加的项目。但是,我遇到了一个问题,即 table 视图中的数据在添加项目后重复。我试图清除数据源数组,然后重新加载 table 视图数据,但它不起作用。这是我的代码:

  override func viewDidLoad()
{
    recipeTableView.delegate = self
    recipeTableView.dataSource = self
    // clear the array
    myRecipes.removeAll()
    // get recipes
    getRecipes()
}

Table 查看扩展函数

    func numberOfSections(in tableView: UITableView) -> Int
    {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return myRecipes.count
    }
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
         recipe = self.myRecipes[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyRecipeCell")
            as! UIMyRecipesCell
        cell.setRecipe(recipe: recipe!)
    }

获取火力基地数据的方法

func getRecipes()
{
 self.myRecipes.removeAll()
 childRef.observe(.value, with: { snapshot in
 for child in snapshot.children
 {
  //create the object and get the info from the fire base and finally store it MyRecipes array
 self.myRecipes.append(recipe)
 }               
  self.recipeTableView.reloadData()

            })

您需要使用 observeSingleEvent 而不是 observe

childRef.observeSingleEvent(of: .value) { snapshot  in 
   ////         
}

childRef.observe(.childAdded) { snapshot  in 
   ////         
}

childRef.observe(.value, with: { snapshot in
   self.myRecipes.removeAll ()
   /// 
}

observe 每次更改都会再次获取所有数据,不像 observeSingleEvent 一次获取所有数据