我想为我的 sqlite 包装器提供 iCloud 支持。没有使用核心数据。
我想知道如何为它启用 iCloud。数据库内容一直在变化(用于开发票)。此外,如果有可能有某种版本控制将会很棒。
是否存在我可以用来执行此操作的任何示例?
简短的回答是否定的,您需要使用您所怀疑的 Core Data。Apple 已声明不支持 sqlite。
编辑:查看现在在 iOS 应用程序编程指南中使用 iCloud 与数据库结合下的 iCloud部分
仅当您的应用程序使用 Core Data 来管理该数据库时,才能将 iCloud 与 SQLite 数据库一起使用。不支持使用 SQLite 接口访问 iCloud 中的实时数据库文件,这可能会损坏您的数据库。但是,只要在设置 Core Data 结构时遵循一些额外的步骤,就可以基于 SQLite 创建 Core Data 存储。您还可以继续使用其他类型的 Core Data 存储,即不基于 SQLite 的存储,无需任何特殊修改。
您不能只将 SQLite 数据库放在 iCloud 容器中,因为它可能会损坏。(当您修改 SQLite 数据库时,会创建并重命名临时文件,因此如果同步过程开始复制这些文件,您将得到一个损坏的数据库。)
如果您不想迁移到 Core Data,您可以执行 Core Data 所做的操作:将数据库存储在文档文件夹中,并将事务日志存储在 iCould 容器中。每次更改数据库时,都会将这些更改添加到日志文件中,以便您可以回放它们并在其他设备上进行等效更改。
这变得相当复杂:除了正确获取日志/回复逻辑之外,您还需要合并冗余更改并定期将日志折叠成数据库的完整副本。
如果您可以利用应用程序的知识,您可能会更轻松地开发解决方案(Core Data 在一般情况下必须解决问题)。例如,您可以将发票保存为云容器中的单独文件(文本、属性列表、XML、JSON 等),在数据库更改时将它们写出来,并且仅在系统告诉您它们已创建或更改时才导入它们。
总之,您的选择是迁移到 Core Data 或自己编写同步解决方案。哪一个最好取决于您的应用程序的细节。