核心数据和JSON问题

时间:2010-06-30 13:48:49

标签: json sqlite core-data dataservice

我知道这个问题之前已经提出过,但我的解释有点不清楚,我的问题更为笼统。我试图概念化如何使用远程Web服务定期更新iPhone应用程序中的数据。理论上,电话上的一部分数据将定期同步(仅在更新时)。而其他数据则要求用户在线,并且可以随时请求。

从概念上讲,这似乎可以使用XML-RPC或JSON和Core数据。我想知道是否有人对实现这一点的最佳方式有意见,我是新手iPhone开发人员,但我从概念上理解了很多这个过程。

由于

3 个答案:

答案 0 :(得分:2)

要在无法控制服务器时同步一组实体,可以采用以下方法之一:

  1. 为您的实体说明添加touched BOOL属性。

  2. 在同步尝试中,将所有实体实例标记为未触及(touched = [NSNumber numberWithBool:NO])。

  3. 遍历服务器端(JSON)实例,并将实体从Core Data存储添加或更新到服务器端存储,反之亦然。更新的方向取决于您的同步策略,以及哪一方面的数据“更新鲜”。无论哪种方式,将已添加,更新或同步的核心数据实体标记为已触及(touched = [NSNumber numberWithBool:YES]

  4. 根据您的同步策略,从Core Data存储中删除所有尚未触及的实体实例。可能会从服务器端存储中删除未触及的实体,因为Core Data存储和服务器之间没有针对这些对象发生添加,更新或同步事件。

  5. 同步是一项需要实施的大量工作,取决于您需要支持的同步程度。如果您只是提取数据,则步骤3相当简单,因为您不需要将对象更新推送到服务器。

答案 1 :(得分:0)

同步很难,很难。理想情况下,您希望从服务器接收更改的增量,然后为Core Data中的每个记录使用唯一ID,仅更新那些新的或更改的记录。

假设你可以这样做,那么代码非常简单。如果你在两个方向同步,那么事情变得更复杂,因为你需要跟踪两侧的增量并处理碰撞。

您能澄清一下您想要实现的同步类型吗?它是双向的还是仅拉动的?

答案 2 :(得分:0)

我有一个答案,但这很糟糕。我正在寻找一个更可接受/可靠的解决方案(即Marcus Zarra做的任何事情)。

我所做的工作需要一些工作......认真,因为它不能一直工作......

移动设备有一个实体的json目录,它们的版本,以及一个指向带有实体内容的json文件的URL。

服务器具有相同的设置,列出实体的目录等

每当移动设备启动时,它会将其本地目录的实体版本与服务器上的目录进行比较。如果服务器上的任何版本更新,它将为用户提供下载实体更新的机会。

当用户选择更新时,移动设备现在具有每个新/已更改实体的URL并下载它。下载后,应用程序将清除每个已更改实体的所有对象,然后从JSON插入新对象。如果发生错误,删除/插入将回滚到更新前状态。

这是有效的。当它出错时,我无法在调试会话中捕获它,因此我不确定在此过程中可能导致损坏或不一致的原因。