ios - 即使在 mergeChangesFromContextDidSaveNotification 之后停止 CoreData 缓存结果

标签 ios core-data nsmanagedobjectcontext

我在我的应用程序中广泛使用 CoreData 来查看产品。所有数据同步都在单独的 NSManagedObjectContexts 后台完成,当更改同步完成时,我调用 mergeChangesFromContextDidSaveNotification

这在 99% 的时间里都能完美运行。这是它崩溃的地方:

  1. 我在我的应用中查看产品。
  2. 我决定要更改价格,所以我转到我控制产品的 Web 服务器并更改价格。
  3. 我回到我的应用程序,浏览该产品,然后我的应用程序同步了网络服务器上对我的应用程序所做的更改。
  4. 我再次查看该产品,价格没有改变。
  5. 我完全退出应用程序并重新打开,然后我可以看到价格变化。

我相信正在发生的事情是 CoreData 正在提供产品的缓存版本,并且直到我查看了一堆其他项目后重新启动应用程序才会提供新版本。

如何在我的 mergeChangesFromContextDidSaveNotification 被调用后清除此缓存?

这让我和我的客户发疯 - 谁知道我该如何补救这种情况?

最佳答案

嗯,这实际上可能有很多原因。 Core Data 的一大优势是它的灵 active ……这也是它的一大缺点。

您可以在数据库上设置大量与缓存和获取相关的旋钮。不过,最简单的方法之一是,是将数据提取到数据库还是只到最新的 MOC。

也就是说,你应该看看这些:

- (BOOL)includesPendingChanges
- (BOOL)shouldRefreshRefetchedObjects

此外,请确保您正在正确处理后台更新和 DidSave 通知,因为 MOC 应该合并这些更改。

不幸的是,在使用多个 MOC 时,Core Data 有一些难以发现的交互。您必须非常小心地遵守所有规则。

关于ios - 即使在 mergeChangesFromContextDidSaveNotification 之后停止 CoreData 缓存结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958107/

相关文章:

ios - iPhone蓝牙和 "Made for iPod"

ios - Xcode Storyboard 显示为空

ios - 为导航栏和 View 设置相同的颜色,但在运行时获得不同的颜色

swift - 调整自定义类以与 CoreData 兼容

iOS - 如何缓存使用 Embedly API 派生的文章文本?

swift - 尝试获取核心数据中的对象时出错 "-[__NSArrayI entity] : unrecognized selector sent to instance"

ios - 仅在用户单击时处理本地通知

macos - SQLite错误代码:14, 'unable to open database file'

ios - 关于与主应用程序共享核心数据上下文的应用程序扩展编程指南

objective-c - 这是传递 ManagedObjectContext 的可接受方式吗?