如何将iPhone核心数据与Web服务器同步,然后推送到其他设备?我一直在研究一种方法,用于在多个设备(如iPad或Mac)之间同步存储在iPhone应用程序中的核心数据。在iOS上使用Core Data的同步框架并不多(如果有的话)。但是,我一直在考虑以下概念:对本地核心数据存储进行更改,并保存更改。(a)如果设备在线,它会尝试将变更集发送到服务器,包括发送变更集的设备的设备ID。(b)如果变更集未到达服务器,或者设备未联机,则应用程序会将更改集添加到队列中以在其联机时发送。位于云中的服务器将其接收的特定更改集与其主数据库合并。在云服务器上合并更改集(或更改集队列)后,服务器会使用某种轮询系统将所有这些更改集推送到向服务器注册的其他设备。(我想使用Apple的推送服务,但显然根据评论,这不是一个可行的系统。)我需要考虑什么花哨的东西吗?我查看了REST框架,例如ObjectiveResource,Core Resource和RestfulCoreData。当然,这些都与Ruby on Rails一起使用,我并不依赖它,但它是一个开始的地方。我对我的解决方案的主要要求是:任何更改都应该在后台发送而不会暂停主线程。它应该使用尽可能少的带宽。我考虑过一些挑战:确保服务器上附加了不同设备上不同数据存储的对象ID。也就是说,我将有一个对象ID和设备ID表,它们通过对存储在数据库中的对象的引用来绑定。我将有一条记录(DatabaseId [此表是唯一的],ObjectId [整个数据库中的项目唯一],Datafield1,Datafield2),ObjectId字段将引用另一个表AllObjects:(ObjectId,DeviceId,DeviceObjectId)。然后,当设备推送更改集时,它将从本地数据存储中的核心数据对象传递设备Id和objectId。然后我的云服务器将检查AllObjects表中的objectId和设备ID,并找到要在初始表中更改的记录。所有更改都应加上时间戳,以便合并它们。设备必须轮询服务器,而不会耗尽太多电池。如果/从服务器收到更改,本地设备还需要更新内存中保存的任何内容。还有什么我在这里失踪的吗?我应该考虑哪些框架才能实现这一目标?
3 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
我建议仔细阅读并实施Dan Grover在iPhone 2009大会上讨论的同步策略,这里可以作为pdf文档获得。
这是一个可行的解决方案,并不难实现(Dan在其几个应用程序中实现了这一点),与Chris描述的解决方案重叠。有关同步的深入理论讨论,请参阅Russ Cox(MIT)和William Josephson(普林斯顿)的论文:
它同样适用于核心数据,并有一些明显的修改。这提供了整体更加强大和可靠的同步策略,但需要更多努力才能正确实施。
编辑:
似乎Grover的pdf文件不再可用(断开链接,2015年3月)。更新:链接可在此处通过返回机器获得
由于iCloud最终似乎支持正确的核心数据同步,因此被Marcus Zarra开发的名为ZSync的Objective-C框架已被弃用。
- 3 回答
- 0 关注
- 688 浏览
添加回答
举报
0/150
提交
取消