Swift ----带有Coredata的疯狂NSFetchedResultsControllerDelegate

时间:2018-08-05 03:25:46

标签: swift nsfetchedresultscontroller

它按原样正常工作。但是从昨天开始,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(),直到重新启动应用程序之前,什么都没有发生。

我错过了什么吗?

0 个答案:

没有答案