- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我创建了两个这样的上下文:
// create writer MOC
_privateWriterContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_privateWriterContext setPersistentStoreCoordinator:_persistentStoreCoordinator];
// create main thread MOC
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
_managedObjectContext.parentContext = _privateWriterContext;
我有一个 NSFetchResultedController
由 _managedObjectContext
启动。
我知道这很奇怪,但我正在向父级添加一条记录到 _privateWriterContext
,我正在保存
它。
令人惊讶的是,子上下文和 FRC
会收到有关此事件的通知。为什么?我没有reset
-ed child 或其他任何东西。我认为只要不保存子上下文,它们就是独立的实体。
在@pteofil 文章中我发现了这一行:
When a change is made in a context, but not saved, it is visible to all of its’ descendants but not to its’ ancestors.
.. it is pushed to the persistent store (via the persistent store coordinator) and becomes visible to all contexts connected to the store.
最佳答案
这不应该发生。添加一个 NSManagedObject ('record') 到 parentContext,不会让 child 自动知道这个对象。只有当你让 childContext 执行一个 fetch 时,它才会从 parentContext 中获取。要弄清楚您的情况,这里有一些建议:
我使用了类似的方法,但有所不同:childContext 是用于解析新数据(在私有(private)队列上)的上下文,当解析完成时,chid 调用 save:。这会将更改保存到父级,在我的例子中是 mainQueueContext。调用 save: 将导致 mainQueueContext 接收所有新解析的对象,然后使用该 mainQueueContext 的任何 fetchedResultsController 将调用它的委托(delegate)方法来处理新的/更改的/更新的/删除的对象。您也可以尝试反转您的 child / parent 关系,看看它是否像文档中描述的那样工作,只是为了找出发生了什么。
关于ios - 奇怪的parent/child NSManagedObjectContext现象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30016148/
我是一名优秀的程序员,十分优秀!