将项目动态添加到 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
一次获取所有数据
我有一个 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
一次获取所有数据