Факты: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 о объединенных объектах?
Большое спасибо!
Maris