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

时间:2012-08-14 18:02:40

标签: ios core-data nsmanagedobjectcontext

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

这种方法在99%的时间内完美运行。这是它崩溃的地方:

  1. 我在我的应用中查看了一个产品。
  2. 我决定要更改价格,所以我转到我控制产品并更改价格的网络服务器。
  3. 我回到我的应用程序,浏览该产品,我的应用程序同步将Web服务器上的更改发送到我的应用程序。
  4. 我再次查看该产品,价格未发生变化。
  5. 我完全退出应用程序然后回到它,然后我可以看到价格变化。
  6. 我相信正在发生的事情是CoreData正在提供该产品的缓存版本,并且在重新启动应用程序之后才会提供新版本的产品。我已经查看过其他一些项目。

    如何在调用mergeChangesFromContextDidSaveNotification之后清除此缓存?

    这让我和我的客户感到疯狂 - 有谁知道如何解决这种情况?

1 个答案:

答案 0 :(得分:2)

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

您可以在数据库中设置大量与缓存和提取相关的旋钮。但最简单的一种方法是将fetch转到数据库或仅转到最新的MOC。

即,你应该看看这些:

- (BOOL)includesPendingChanges
- (BOOL)shouldRefreshRefetchedObjects

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

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