事实:
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
仅实际更改的行?非常感谢!
Maris的
答案 0 :(得分:0)
您现在可以使用NSPersistentContainer
来设置堆栈。
新容器viewContext
和backgroundContext
会自动发送和使用通知,并将其与PersistentStoreCordinator
合并。
这样您就不需要自己管理合并,而NSFetchedResultController
上设置的viewContext
会更新