我们有三个独立的应用程序,它们位于同一应用程序组中并访问同一 CoreData 存储。问题是,当我从托管对象中的关系更改 NSOrderedSet
中的项目中的某些内容时,保存到执行刷新的另一个应用程序,更改的数据不存在。
我们使用 NSPercientContainer
并且每个应用程序中仅使用一个上下文,container.newBackgroundContext()
保存到单例中的属性。对于每个应用程序,当应用程序转到 BG 时,会在该上下文中执行 save()
;当应用程序转到 FG 时,会在上下文中调用 refreshAllObjects()
。
当我更改托管对象中的某些基本属性时,它会在另一个应用程序中正确更改。但是,当我更改 NSSet 中项目中的某些属性(这是托管对象上的关系)时,此更改在另一个应用程序中不可见。
当我调试时,我尝试调用 fetch 但它也只提供旧数据。仅当我调用 context.reset()
然后再次获取时,它才会返回有效的新数据。
问题是我无法在整个上下文中使用重置,因为我将丢失应用程序中所有已注册的对象。
使用 refreshAllObjects()
时,引用对象更改不会应用,这是有效行为还是错误?
有没有办法强制获取请求直接从数据库获取数据而不是从上下文中缓存数据?
最佳答案
我找到了解决问题的方法。我能够通过设置 shouldRefreshRefetchedObjects 强制直接从持久性(而不是从上下文)获取。将 NSFetchRequest
属性设置为 true
。
我无法找到一个解决方案来刷新已获取的对象 - 但这样我至少能够使用新的获取来获取新数据。
关于ios - CoreData refreshAllObjects() 不会刷新所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49486548/