Fakten:NSManagedObjectContext fusionieren von privaten Kontext, aktualisieren Sie nur Objekte geändert
- I Coredata verwenden.
- Ich habe Elternobjekt mit untergeordneten Zeilen, wo Kinder 500 Objekte möglicherweise überschreiten können.
- Ich zeige diese untergeordneten Objekte in
UITableViewController
UITableView
. - Ich habe es eingerichtet, um mit
NSFetchedResultsController
arbeiten, so dass ich Updates erhalten, sobald sich etwas ändert. Und ich brauche das. Ich Verschmelzung Änderungen von privaten Kontext zu Haupt Zusammenhang mit dem folgenden Code:
@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
gesetzt ist nur auf untergeordnete Objekte.
Problem:
Wenn auch nur ein Kind-Objekt für diese übergeordnete Objekt ändert, wird die func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)
für alle untergeordneten Zeilen aufgerufen wird, das heißt, es heißt> 500 Mal, und im Grunde die App gefriert.
Was ich entdeckt:
- Die Update-Benachrichtigungen für alle untergeordneten Objekte durch diese Linie nach merge verursacht:
self.managedObjectContext.refreshAllObjects()
. - Wenn ich diese Zeile entfernen, erhält
NSFetchedResultsController
keine Benachrichtigung, dass etwas überhaupt aktualisiert wird - aber ich brauche das.
Fragen:
- Wie kann ich, dass eine bestimmte Reihe von geändertenem Kind-Objekt machen, das heißt - wie kann ich
NSFetchedResultsController
nur tatsächlich geänderte Zeilen mitteilen? - Was ist die typische Lösung, um NSFetchedResultsController über zusammengeführte Objekte zu benachrichtigen?
Vielen Dank!
Maris