将本地sqlite文件同步到iCloud

JDR*_*JDR 18 sqlite synchronization core-data ios icloud

我将一些数据直接存储在我的i​​OS应用程序中的本地.sqlite文件中.我选择这样做而不是CoreData,因为数据需要与非Apple平台兼容.

现在,我正在尝试通过iCloud提供同步此文件的最佳方法.我知道你不能直接同步它,原因有很多.我知道CoreData是能够同步的数据块,但即使忽略使用CD将基本上锁定这个文件放到苹果平台(我认为吗?我只看着CD了一下),我需要这个文件的iCloud同步跨工作所有iCloud支持的平台 - 应该包括Windows.我必须假设Windows API中的CoreData文件没有任何兼容性.如果Apple告诉我们的不仅仅是"将会有一个Windows API [最终?]",那么规划出实现这一目标的最佳方法会容易得多.

此外,我最终还需要实现至少一个同步服务来支持iCloud不支持的平台.如果我用于iCloud的方法可以主要用于未来的服务,那将是有帮助的,尽管不是必需的.

出于这些原因,我认为CoreData不能帮助我解决这个问题.我在想这个是正确的吗?

从那里继续,我需要为此设计一个算法,或找到现有的或第三方现有的解决方案.我还没有发现任何事情.但是,我一直在考虑我可以实现的几种可能的方法:

方法1:

执行类似于CoreData同步sqlite DB的操作:将"事务日志"发送到iCloud,然后构建每个本地sqlite文件.

我想每个设备都会发送一个(唯一命名的)文本文件,列出该设备执行的所有sql命令,并带有时间戳.设备将存储它已执行的每个命令列表中的距离,并在每次更新文件时从该点继续.如果它一次收到多个日志文件的更新,它将按时间戳顺序执行每个命令.

一旦这些文件变大,事情就会变得有趣"有趣",但这似乎是一个可解决的问题.  

方法2:

定期将工作数据库的副本同步到iCloud.在每条记录中都有一个修改时间戳字段.当更新的数据库副本通过时,查询具有比某个参考时间更新的时间戳的所有记录,并从新数据更新本地数据库中的记录.

我发现这种方法有很多潜在的问题:

- 有进一步实现的东西来识别记录删除.

- DB文件可能会发生冲突.可以通过按时间戳顺序处理每个冲突版本来处理它们.

- 确定检查每个更新的日期可能很棘手,因为它取决于更新来自哪个设备.

方法2存在很多潜在的问题,但方法1 对我来说似乎是可行的......

有没有人对什么是最好的行动方案有任何建议?有没有比我的"方法1"更好的想法(或者为什么它不起作用的原因)?

Chr*_*zzz 3

尝试 Ray Wenderlich 的这两个解决方案:

通过邮件导出/导入数据: http://www.raywenderlich.com/1980/how-to-import-and-export-app-data-via-email-in-your-ios-app

与 iTunes 共享文件: http://www.raywenderlich.com/1948/how-integrate-itunes-file-sharing-with-your-ios-app

我发现它很复杂,但对我帮助很大。

  • 这些只是为了简单地传输文件(iCloud 也可以这样做)。我遇到的问题是将更改镜像到多个设备上存在的数据库文件。我不能只将一份副本复制到其他设备,因为每台设备上的版本可能会有独特的更改。不管怎样,我最终实现了“方法1”并且到目前为止它正在起作用...... (2认同)