ios - CoreData refreshAllObjects() 不会刷新所有对象

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

我们有三个独立的应用程序,它们位于同一应用程序组中并访问同一 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/

相关文章:

ios - 如何使用应用内自定义键盘的按钮输入文本

ios - Swift UITextField 类不显示编辑

swift - Parse Server LiveQuery 没有响应 AWS

iphone - 核心数据 : Fetching an Object from an unsaved Context

objective-c - NSFetchedResultsController 不调用 controllerDidChangeContent : after update to non-fetched NSManagedObject

ios - 为已创建的 UIManagedDocument 的后台队列创建 managedObjectContext

ios - UIScrollView 后面的 UITableView

ios - 显示和隐藏键盘时 UITableView 部分页脚出现问题

ios - 如何将当前位置设置为 request.source Swift 3

swift - Array.max(by :) difficulty understanding