我可以"manually"将项目插入AFIncrementalStore的缓存吗?



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

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

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

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

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

requestForInsertedObject:insertedObject
requestForUpdatedObject:updatedObject
requestForDeletedObject:deletedObject

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

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

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

相关内容

  • 没有找到相关文章

最新更新