我可以“手动”将项目插入AFIncrementalStore的缓存中吗?

时间:2013-10-30 10:46:05

标签: ios core-data afincrementalstore

我已设置AFIncrementalStore以通过网络从JSON服务中获取对象,并将其persistentStore设置为SQLite数据库。一切正常。

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

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

任何人都知道我是如何做到这一点的?

2 个答案:

答案 0 :(得分:0)

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

requestForInsertedObject:insertedObject
requestForUpdatedObject:updatedObject
requestForDeletedObject:deletedObject

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

答案 1 :(得分:0)

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

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