它按原样正常工作。但是从昨天开始,NSFetchedResultsControllerDelegate不被调用,我什么也没修改。我已经多次检查此代码,但没有发现任何错误。
在使用NSFetchedResultsControllerDelegate时,我会失去一些重要的东西吗?
我已经启动了NSFetchedResultsControllerDelegate,如下所示:
class goodListTableViewController: UITableViewController, NSFetchedResultsControllerDelegate {
var fc: NSFetchedResultsController<NSFetchRequestResult>!
let delegate = UIApplication.shared.delegate as! AppDelegate
然后,我将函数设置如下:
func fetchUpdateData() {
let request: NSFetchRequest<Good> = Good.fetchRequest()
let sd = NSSortDescriptor(key: "time", ascending: false)
request.sortDescriptors = [sd]
let app = UIApplication.shared.delegate as! AppDelegate
let context = app.persistentContainer.viewContext
fc = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) as! NSFetchedResultsController<NSFetchRequestResult>
fc.delegate = self
do {
try fc.performFetch()
print("fetch Controller register success")
} catch {
print(error)
}
}
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
print("start update")
tableView.beginUpdates()
}
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
switch type {
case .delete:
tableView.deleteRows(at: [indexPath!], with: .automatic)
case .insert:
tableView.insertRows(at: [newIndexPath!], with: .automatic)
case .update:
tableView.reloadRows(at: [indexPath!], with: .automatic)
default:
tableView.reloadData()
}
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
print("end update")
tableView.endUpdates()
}
在viewdidload中,我叫: fetchUpdateData()
最后,我添加了带有coredata函数的数据。永远不要打印“开始更新”或“结束更新”。
我什至尝试了 context.automaticallyMergesChangesFromParent = true ,但没有任何反应。
使用tableview.reloadDate(),直到重新启动应用程序之前,什么都没有发生。
我错过了什么吗?