Ios 重置子上下文时,在更新父上下文的同时,子上下文会发生什么情况?

Ios 重置子上下文时,在更新父上下文的同时,子上下文会发生什么情况?,ios,multithreading,core-data,nsmanagedobjectcontext,Ios,Multithreading,Core Data,Nsmanagedobjectcontext,如果我创建如下所示的父/子上下文并推荐: 出于某种原因,我也在添加对\u managedObjectContext和\u privateWriterContext的更改,并且仅保存\u privateWriterContext,然后在I重置\u managedObjectContext时进行更改,然后\u managedObjectContext将重置为\u privateWriterContext更新状态 回滚< /代码>会有同样的效果吗?让我们考虑上面的情况,您有一个私有队列上下文,它被连

如果我创建如下所示的父/子上下文并推荐:


出于某种原因,我也在添加对
\u managedObjectContext
\u privateWriterContext
的更改,并且
仅保存
\u privateWriterContext
,然后在I
重置
\u managedObjectContext
时进行更改,然后
\u managedObjectContext
将重置为
\u privateWriterContext
更新状态


<代码>回滚< /代码>会有同样的效果吗?

让我们考虑上面的情况,您有一个私有队列上下文,它被连接到持久存储。现在,您可以从它创建一个子上下文,将一些对象插入到这个子上下文中。当您保存子上下文并将更改传播到父上下文以进行保存时,更改已保存到持久存储

现在,重置并不意味着什么,它只是清除托管对象上下文缓存。因此,如果重置子上下文,那么它拥有的缓存将被清除。这也意味着,如果您再次在此子上下文上执行fetch,则所有已保存的更改都将再次显示。如果您的目的是撤消managedObjectContext中的更改,NSManagedObjectContext类提供了可以使用的撤消回滚方法


重置根本没有任何意义。每个托管对象都有自己的缓存,它跟踪其内存中所有已获取的对象,因此,如果重置managedObjectContext,其内存中的所有对象都将被清除

你是对的,当然,微调了我的问题,我只想保存
\u privateWriterContext
那么你想对子上下文更改做什么?
\u managedObjectContext
只是用于GUI,它是内存缓存,我不在乎更改是否丢失,目的是有时用户交互来得太快,我想让
\u managedObjectContext
与这些交互保持同步OK,所以您只想将其用作缓存。事实上,它工作得很好。除非将保存消息传播到父上下文,否则不会保存该对象,并且在重置或解除分配managedObjectContext时,也会释放所有对象。如果没有,请告诉我。
// create writer MOC
_privateWriterContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_privateWriterContext setPersistentStoreCoordinator:_persistentStoreCoordinator];

// create main thread MOC
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
_managedObjectContext.parentContext = _privateWriterContext;