我使用Realm Notification通过插入,修改和删除来更新我的表。
self.results = realm.objects(PostObject.self).sorted(byKeyPath: "id", ascending: false)
notificationToken = results.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
guard let tableView = self?.tableView else { return }
switch changes {
case .initial:
tableView.reloadData()
break
case .update(_, let deletions, let insertions, let modifications):
tableView.isUserInteractionEnabled = false
tableView.beginUpdates()
tableView.deleteSections(IndexSet(deletions), with: .automatic)
tableView.insertSections(IndexSet(insertions), with: .automatic)
tableView.reloadSections(IndexSet(modifications), with: .automatic)
tableView.endUpdates()
tableView.isUserInteractionEnabled = true
break
case .error(let error):
fatalError("\(error)")
break
}
}
在第一次更新时,表格会正确显示。第二次调用更新时,tableview开始丢失单元格。像这样:
在此示例中,删除和修改为空,只有insertions数组中包含索引。我看到在更新期间滚动tableview时也会导致此问题。
答案 0 :(得分:0)
使用UITableViewCell
的自定义子类时缺少单元格的一个原因是忘记调用super.prepareForReuse()
。
Apple在https://developer.apple.com/documentation/uikit/uitableviewcell/1623223-prepareforreuse声明:
如果重写此方法,则必须确保调用超类 实施。
始终确保调用超级:
override func prepareForReuse() {
super.prepareForReuse()
// your code follows
}