使用带有 Core Data 的 RestKit 当用户通过标记对象并使用 Core Data 保存它们而在没有互联网连接的情况下添加、编辑或删除对象时,我提供离线支持。

如果互联网再次可用,我将获取所有添加/编辑/删除的对象,将它们保存在数组中,并且知道使用正常方法并循环每个项目以将它们放在服务器上。

数组列表
- fetchedAddedCompanies
- 获取编辑公司
- fetchedAddedContacts
- fetchedEditedContacts
- fetchedDeletedContacts

初始化方法(编辑公司示例)

// Added Companies
...

// Edited Companies
for (Company *tempObj in fetchedAddedCompanies)
{
    // Find keys for selected languages
    [self updateAccountToServer:tempObj:addCompanyContext];
}

// ...

updateAccountToServer 结束时,我发布了对象 (self.company),并将其映射到服务器。
...
[objectManager postObject:self.company mapResponseWith:[companyMapper inverseMapping] delegate:self];
...

问题

我正在寻找一种更有效的解决方案,当用户确实更新了一些对象并且 - 特别的那个 - 确实添加了一些新对象,因为与所有编辑/删除方法相比,服务器为每个新创建的对象返回一个 ID将被存储。

1) 避免使用例如updateAccountToServer 为每个编辑的对象发送一个对象数组
2) 将 RKRequestQueue RKObjectManager ( regarding this question and a good answer ) 一起使用

在我看来 1) 将很难实现,因为每个请求的 resourcePath 都包含一个唯一的 ID,所以我尝试了 2) 但缺少使用 绑定(bind)每个请求 映射的可能性
[syncQueue addRequest:[[RKObjectManager sharedManager] objectLoaderWithResourcePath:tempString delegate:self]];

谢谢你的想法!

最佳答案

我自己和其他一些人正在积极致力于开发分支,以将其自动集成到 RestKit 中。

我们正在 RK 内部实现一个同步管理器,它监视 NSManagedObjectContext 的变化,如果网络不可用,则将这些请求排队,直到网络恢复。

我们很乐意在代码上获得更多帮助/想法,所以如果您能在此页面上告诉我们更多有关您的用例的信息:

https://github.com/RestKit/RestKit/pull/573

关于core-data - RestKit - 在离线存储后发送添加/编辑/删除的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9916960/

10-12 14:36
查看更多