我在我的应用程序中广泛使用 CoreData 来查看产品。所有数据同步都在单独的 NSManagedObjectContexts 后台完成,当更改同步完成时,我调用 mergeChangesFromContextDidSaveNotification
这在 99% 的时间里都能完美运行。这是它崩溃的地方:
- 我在我的应用中查看产品。
- 我决定要更改价格,所以我转到我控制产品的 Web 服务器并更改价格。
- 我回到我的应用程序,浏览该产品,然后我的应用程序同步了网络服务器上对我的应用程序所做的更改。
- 我再次查看该产品,价格没有改变。
- 我完全退出应用程序并重新打开,然后我可以看到价格变化。
我相信正在发生的事情是 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/