CoreData refreshAllObjects()不刷新所有对象

时间:2018-03-26 07:56:13

标签: ios swift core-data ios-app-group

我们有三个独立的应用程序,它们位于同一个应用程序组中并访问同一个CoreData存储。问题是,当我在管理对象中的关系中更改NSOrderedSet中的项目中的某些内容时,请保存到另一个执行刷新的应用程序,更改的数据不存在。

我们正在使用NSPersistentContainer,每个应用中只有一个上下文,container.newBackgroundContext()以单身形式保存到属性中。当应用转到BG save()时,每个应用都会在该上下文中执行,当应用转到FG时refreshAllObjects()会在上下文中调用。

当我更改托管对象中的某些基本属性时,它会在另一个应用程序中正确更改。但是当我从NSSet中更改某个属性时,这是托管对象上的一个关系,这个更改在另一个应用程序中不可见。

在我调试时,我尝试调用fetch,但它也只提供旧数据。只有当我调用context.reset()然后再次获取它才会返回有效的新数据。

问题是我不能在整个上下文中使用reset,因为我将丢失app中的所有注册对象。

使用refreshAllObjects()时,是否应用了引用对象更改的有效行为或错误?

有没有办法如何强制获取请求直接从数据库获取数据而不是从上下文中缓存数据?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。通过将NSFetchRequest的{​​{3}}属性设置为true,我能够强制提取直接从持久性(而不是从上下文)获取。

我无法找到只刷新已经获取的对象的解决方案 - 但这样我至少可以使用新的获取来获取新数据。