4

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

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

数组列表
- 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一起使用(关于这个问题和一个好的答案

在我看来 1) 将很难实现,因为每个请求的 resourcePath 都包含一个唯一的 ID,所以我尝试过 2) 但缺少使用绑定每个请求的映射的可能性

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

谢谢你的想法!

4

2 回答 2

1

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

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

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

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

于 2012-05-08T04:33:08.670 回答
1

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

于 2012-07-23T23:50:43.003 回答