2

我设置了AFIncrementalStore以通过网络从 JSON 服务中获取对象,并将其 persistentStore 设置为 SQLite 数据库。这一切都很好。

现在我想要做的是将对象带外添加到该 SQLite 数据库(从 AFIncrementalStore 指向的 Web 服务以外的东西),并将这些添加反映在从原始托管对象上下文创建的获取结果控制器中.

我已经创建了一个以原始 MOC 作为其父对象的托管对象上下文,我可以向其中添加对象,并且它们可以被获取的结果控制器看到。但是它们没有保存到 AFIncrementalStore 的 SQLite 数据库中。有趣的是,AFIncrementalStore 看到这些对象,因为它试图将它们保存回 JSON 服务并抱怨不存在正确的端点(我通过覆盖requestForInsertedObject:insertedObject来解决这个问题 return nil。)

有谁知道我是如何做到这一点的?

4

2 回答 2

0

听起来您已经找到了大部分答案。AFIncrementalStore 检查requestForInsertedObject:您的 AFRESTClient 子类中是否有 nil 响应。如果该方法返回 nil,AFIS 会为对象创建一个永久 ID,将对象存储在后备存储中,并且不会再次尝试将其发送到服务器。这都是在第一节executeSaveChangesRequest:withContext:error:

您是否总是调用save:父 ManagedObjectContext?如果不是,那将是它没有将对象存储在 SQLite 中的另一个原因。但是它也不应该尝试将对象发布到服务器。

于 2013-12-16T18:14:27.663 回答
0

如果您不想将对象 POST 到服务器,则必须覆盖方法

requestForInsertedObject:insertedObject
requestForUpdatedObject:updatedObject
requestForDeletedObject:deletedObject

然后,当您调用上下文的 save: 方法时,您的对象必须保存在数据库中。当我离线执行 CRUD 操作时,我使用了类似的逻辑,并且工作正常。

于 2013-11-15T13:40:12.180 回答