从
中的表中删除项目时,我尝试使用领域数据库通知func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let deleteAction = UITableViewRowAction(style: .destructive, title: "delete") { (action, indexPath) in
let index = indexPath.row
self.groupDao.deleteWithChilds(item: self.realmGroup![index])
}
......
并使用标准通知:
notificationToken = realmGroup.observe { [weak self] (changes: RealmCollectionChange) in
// guard let tableView = self?.tableView else { return }
switch changes {
case .initial:
// Results are now populated and can be accessed without blocking the UI
self!.mainTableView.reloadData()
case .update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the UITableView
print("from group realm")
self!.mainTableView.beginUpdates()
self!.mainTableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
self!.mainTableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0)}),
with: .automatic)
self!.mainTableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
self!.mainTableView.endUpdates()
case .error(let error):
// An error occurred while opening the Realm file on the background worker thread
// fatalError("\(error)")
print(error)
}
}
,并且效果很好。但是当我使用搜索栏并尝试从搜索结果中删除一个项目时,该项目将从数据库中删除,而不是从表中删除。
我的防沙漏过滤器:
func searchBy(text: String) {
if(text.isEmpty) {
realmGroup = groupDao.getAllItemsSortByName()
}else{
realmGroup = groupDao.contains(name: text)
}
mainTableView.reloadData()
}