事實:的NSManagedObjectContext從私人範圍內合併,只刷新更改的對象
- 我使用CoreData。
- 我有父子對象與子行,其中子女可能會超過500個對象。
- 我在
UITableViewController
UITableView
中顯示那些子對象。 - 我已經將它設置爲與
NSFetchedResultsController
一起使用,允許我在發生某些變化時立即獲得更新。我需要那個。 我合併來自私人環境的變化與下面的代碼主要方面:
@objc func privateContextDidSaveNotification(notification: NSNotification) { let savedContext = notification.object as! NSManagedObjectContext if savedContext == self.managedObjectContext { return // This is the Main context } if savedContext.persistentStoreCoordinator != self.managedObjectContext.persistentStoreCoordinator { return // This is different DB } self.managedObjectContext.performBlockAndWait( { self.managedObjectContext.mergeChangesFromContextDidSaveNotification(notification) self.managedObjectContext.refreshAllObjects() }) }
NSFetchedResultsController.delegate
設置僅對子對象。
問題:
如果此父對象的變化,甚至一個子對象,在 func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)
被調用的所有子行,這意味着,它被稱爲> 500次,基本上,應用程序凍結。
我發現了什麼:
- 所有孩子的更新通知對象不受此行合併後引起的:
self.managedObjectContext.refreshAllObjects()
。 - 如果我刪除該行,然後
NSFetchedResultsController
不會收到任何通知,根本不需要更新 - 但我需要。
問題:
- 我怎樣才能讓這改變子對象的一個特定的行,這意味着 - 我怎麼能通知
NSFetchedResultsController
實際上只改變了行? - 什麼是通知NSFetchedResultsController關於合併對象的典型解決方案?
非常感謝!
馬里斯