RestKit - 离线存储后发送添加/编辑/删除的对象

时间:2012-03-28 23:08:48

标签: core-data restkit request-queueing

将RestKit与核心数据一起使用当用户通过标记对象并使用核心数据保存对象来添加,编辑或删除没有互联网连接的对象时,我将提供离线支持。

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

数组列表
- fetchedAddedCompanies
- fetchedEditedCompanies
- 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)但是缺少使用绑定每个请求的映射的可能性

[syncQueue addRequest:[[RKObjectManager sharedManager] objectLoaderWithResourcePath:tempString delegate:self]]; 

感谢您的想法!

2 个答案:

答案 0 :(得分:1)

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

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

我们希望对代码有更多的帮助/想法,所以如果您可以在此页面上告诉我们有关您的用例的更多信息:

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

答案 1 :(得分:1)

对于1,您可以将插入/更新/删除的对象的NSArray封装到新对象中,然后将其发布到服务器。为此,您需要确保在已修改的对象上设置正确的位以供服务器解密,并确保服务器可以接收对象,并解构它以获取已修改对象的数组。