当在moc A中删除托管对象时,它是否仍然存在于moc B中?

时间:2017-01-07 14:34:55

标签: ios objective-c core-data

想象一下两个托管对象上下文,moc A和moc B填充了同一组对象并共享同一个持久性存储协调器。现在,我从moc A中删除一个对象并保存上下文。它是否仍然存在于moc B中?

我测试了那个场景,似乎对象仍然在moc B中闲逛,但是我不确定它们是否安全,即从某种意义上说我能够将它们写回来到商店。

我问的原因是我想在Core Data支持的应用中实现剪切/复制/粘贴,但在副本上我不想将实际对象写入粘贴板而是使用promise / data provider机制。

因此,让我们说用户复制了一堆托管对象,然后我向粘贴板写了一个承诺(一个对象ID数组)。然后,假设用户删除所有这些对象,但后来想要将它们粘贴回某处。我的数据提供商无法获取它们,因为它们已被删除。

但是我想知道如果我将它们存储在私有托管对象上下文中以便妥善保管会发生什么。它们是否会在从主要背景中删除后从保管环境中消失?

1 个答案:

答案 0 :(得分:2)

问题Will it still exist in moc B的答案是:它取决于:)

因此,如果您的代码在iSO 10(或更高版本)上运行,则答案为Yes, it will still exist,因为上下文A具有不同的Generation数据。

如果您的代码在iOS 9(或之前版本)上运行,则答案是:它取决于。如果上下文B中的任何对象是fault,那么如果您尝试访问任何属性(来自此错误的对象),您的应用程序将会崩溃,如CoreData could not fulfill a fault。否则,您可以访问这些数据(它们保存在原始缓存中)。但是(可能,我从来没有尝试过)如果你试图保存被其他上下文删除的对象,那么我预计CoreData会出错。

Will they disappear from the safekeeping context after they're deleted from the main context?的答案 是: 不,它们不会消失但是在iOS 9(或之前的版本)中,如果你有一些fault s,你永远无法实现它们(因为它们不再存在于任何地方)。