我将一些数据直接存储在本地.sqlite文件中。我选择这样做而不是CoreData,因为数据需要与非Apple平台兼容。将本地sqlite文件同步到iCloud
现在,我试图想出通过iCloud同步此文件的最佳方法。我知道你不能直接同步它,原因很多。我知道CoreData能够同步其数据库,但即使忽略使用CD本质上也会将此文件锁定到Apple平台(我认为?我只看了一下CD),我需要iCloud同步此文件以跨越所有iCloud的支持平台 - 应该包括Windows。我必须假定Windows API中的CoreData文件不会有任何兼容性。如果苹果公司告诉我们任何其他更多的信息,那么规划出最好的方法将会容易得多。“最终会有一个Windows API”
此外,我最终需要实现至少一个更多的同步服务来支持iCloud不支持的平台。如果我用于iCloud的方法可以主要用于未来的服务,这将有所帮助,但不是必需的。
由于这些原因,我不认为CoreData可以帮助我做到这一点。我是否认为这是正确的?
从那里开始,我需要为此设计一个算法,或者找到现有的或现有的第三方解决方案。我还没有偶然发现任何东西。不过,我一直在思索了几个可能的方法,我可以实现:
方法1:
做类似的东西CoreData如何同步源码DBS:发送“事务日志”到iCloud,而不是和构建每个本地SQLite文件关闭这些。
我在想每个设备都会发送一个(唯一命名的)文本文件,列出该设备执行的所有sql命令以及时间戳。该设备将存储它已执行的每个命令列表中的多远,并在每次更新文件时从该点继续。如果它一次收到多个日志文件的更新,它将按照时间戳顺序执行每个命令。
一旦这些文件变大,事情会变得“有趣”,效率明智,但它似乎是一个可解决的问题。
方法2:
定期同步的工作数据库到iCloud的副本。在每个记录中都有一个修改时间戳字段。当数据库的更新副本到达时,使用比某个参考时间更新的时间戳查询所有记录,并从新数据更新本地数据库中的记录。
我看到很多潜在的问题,用这种方法:
- 具备实现的东西进一步认识到记录删除。
- DB文件可能会发生冲突。通过按照时间戳顺序处理每个冲突版本,可以处理它们。
- 确定检查每个更新的日期可能会非常棘手,因为它取决于更新来自哪个设备。
方法2有很多潜在的问题,但方法1 似乎可以对我做...
有没有人有什么建议可能是最佳的行动方案?比我的“方法1”有什么更好的想法(或者它不起作用的原因)?
这些仅用于传输文件(iCloud也可以)。我遇到的问题是将更改镜像到多个设备上存在的数据库文件。我不能仅将一个副本复制到其他设备,因为每个设备上的版本可能有独特的更改。无论如何,我最终实施了“方法1”,目前工作正常...... – JDR