将项目动态添加到 TableView 导致重复单元格
Posted
技术标签:
【中文标题】将项目动态添加到 TableView 导致重复单元格【英文标题】:Dynamically adding item to TableView resulted in repeated cells 【发布时间】:2019-12-31 13:11:57 【问题描述】:我有一个从 Firebase 数据库动态加载数据的 tableview。我还有一个添加按钮,允许用户在必须更新表视图之后在 Firebase 数据库中添加并再次从 firebase 重新加载数据以及新添加的项目。但是,我遇到了一个问题,即添加项目后表格视图中的数据重复。我试图清除数据源数组,然后重新加载表视图数据,但它不起作用。这是我的代码:
override func viewDidLoad()
recipeTableView.delegate = self
recipeTableView.dataSource = self
// clear the array
myRecipes.removeAll()
// get recipes
getRecipes()
表格视图扩展功能
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()
)
【问题讨论】:
【参考方案1】:您需要使用observeSingleEvent
而不是observe
childRef.observeSingleEvent(of: .value) snapshot in
////
或
childRef.observe(.childAdded) snapshot in
////
或
childRef.observe(.value, with: snapshot in
self.myRecipes.removeAll ()
///
observe
每次更改都会再次获取所有数据,而observeSingleEvent
会获取所有数据一次
【讨论】:
以上是关于将项目动态添加到 TableView 导致重复单元格的主要内容,如果未能解决你的问题,请参考以下文章