1

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

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

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

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

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

这让我和我的客户发疯——有人知道我该如何补救这种情况吗?

4

1 回答 1

2

好吧,实际上可能有很多原因。Core Data 的一大优点是它的灵活性……这也是它的一大缺点。

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

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

- (BOOL)includesPendingChanges
- (BOOL)shouldRefreshRefetchedObjects

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

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

于 2012-08-14T19:43:30.563 回答