ios – 奇怪的父/子NSManagedObjectContext现象

前端之家收集整理的这篇文章主要介绍了ios – 奇怪的父/子NSManagedObjectContext现象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了两个这样的上下文:
// 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收到关于这个事件的通知.为什么?我还没有重置孩子,或其他任何东西.只要孩子的上下文不能得到保存,我认为他们是独立的实体.

在@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,不会使孩子自动识别该对象.只有当您使childContext执行fetch时,才会从parentContext中获取.
要弄清楚你的情况发生了什么,这里有一些建议:

找出对childContext执行撷取时(这是通过fetchedRestultsController完成的).在检查parentContext之前或之后,检查该撷取是否发生.
>在fetchedResultsController的所有四个委托回调中设置断点,以找出它正在调用哪个对象(并查看它是否是刚添加到parentContext的对象).
确保你知道你发送邮件的哪个上下文.

我有一个使用类似的方法,但不同的是:childContext是上下文用于解析新数据(在私有队列中),当这个解析完成时,chid调用save:.这将保存更改为父级,这在我的情况下是mainQueueContext.此调用save:将导致mainQueueContext接收所有新解析的对象,并且任何使用该mainQueueContext的fetchedResultsController将会调用它们的新/更改/更新/删除对象的委托方法.您可以尝试反转您的孩子/父母关系,并查看文档中是否按照文档中所述进行操作,以便了解发生的情况.

原文链接:https://www.f2er.com/iOS/330405.html

猜你在找的iOS相关文章