-1

是否可以使用 RESTKit 进行双向同步?我玩过 RESTKit 和 CoreDate。现在我可以从我的 REST 服务下载所有数据,CoreDate 中的所有更改(创建/修改/删除对象)都将被 RESTKit 覆盖。

现在我想在两个版本(本地版本或远程版本)之间进行选择。我该怎么做呢?有没有办法操纵映射,或类似的东西?

更新:我的应用程序应该在一些更改或特定延迟后同步(不难)。每个对象都有一个更改日期。到目前为止,我想保留较新的(如果它们与本地相同)。我希望 RestKit 能够改变它合并对象的策略。类似于我可以设置的块,我可以在其中获取两个对象并可以返回合并的对象。

到目前为止我得到了什么:我通过 RestKit 加载对象但不持久化它们。我还设置了一个 CoreData 存储,用于存储本地对象。加载远程对象后,我开始同步自己。首先搜索对,然后决定采用、删除、创建、覆盖等等……

但这是一大堆工作,我认为 RestKit 正在做类似的事情。为什么不简单地根据我的要求改变 RestKit 的策略。

那么这将是“同步”的事情。在此之后,我可以将同步的数据集写回服务。更改不是很频繁,因此我不必检查新更改。

我希望现在它更清楚一点

4

2 回答 2

1

您真正想做的是验证传入的数据。

由于 RestKit 使用 CoreData,它会自动使用 CoreData 中内置的验证(请参阅此处

这是一个示例,可确保日期永远不会更改为较早的日期。

- (BOOL) validateChangeDate:(id *)ioValue error: (NSError **)outError {

    if ([[*ioValue laterDate:self.changeDate] compare:self.changeDate] == NSOrderedSame)
        *ioValue = self.changeDate;
    return YES;
}

注意:可能有更好/更快的方法来测试我们是否需要更改日期
注意 2:根据文档,如果 RestKit 看到一个值被拒绝,它会使整个对象失败,这是我们不想要的,所以这是为什么我们总是返回 YES 并且只更改传入日期
注 3:我们也不想更改值,除非我们必须这样做,因为 CoreData 文档在这里说

于 2014-07-29T17:41:47.267 回答
0

您可以利用 KVC 验证来实现此目的,因为它允许您检查然后编辑或拒绝每个对象和键的更改。检查这些文档

于 2013-10-07T09:33:22.073 回答