8

我想为我的 sqlite 包装器提供 iCloud 支持。没有使用核心数据。

我想知道如何为它启用 iCloud。数据库内容一直在变化(用于开发票)。此外,如果有可能有某种版本控制将会很棒。

是否存在我可以用来执行此操作的任何示例?

4

2 回答 2

7

简短的回答是否定的,您需要使用您所怀疑的 Core Data。Apple 已声明不支持 sqlite。

编辑:查看现在在 iOS 应用程序编程指南中使用 iCloud 与数据库结合下的 iCloud部分

仅当您的应用程序使用 Core Data 来管理该数据库时,才能将 iCloud 与 SQLite 数据库一起使用。不支持使用 SQLite 接口访问 iCloud 中的实时数据库文件,这可能会损坏您的数据库。但是,只要在设置 Core Data 结构时遵循一些额外的步骤,就可以基于 SQLite 创建 Core Data 存储。您还可以继续使用其他类型的 Core Data 存储,即不基于 SQLite 的存储,无需任何特殊修改。

于 2011-10-17T20:35:59.530 回答
7

您不能只将 SQLite 数据库放在 iCloud 容器中,因为它可能会损坏。(当您修改 SQLite 数据库时,会创建并重命名临时文件,因此如果同步过程开始复制这些文件,您将得到一个损坏的数据库。)

如果您不想迁移到 Core Data,您可以执行 Core Data 所做的操作:将数据库存储在文档文件夹中,并将事务日志存储在 iCould 容器中。每次更改数据库时,都会将这些更改添加到日志文件中,以便您可以回放它们并在其他设备上进行等效更改。

这变得相当复杂:除了正确获取日志/回复逻辑之外,您还需要合并冗余更改并定期将日志折叠成数据库的完整副本。

如果您可以利用应用程序的知识,您可能会更轻松地开发解决方案(Core Data 在一般情况下必须解决问题)。例如,您可以将发票保存为云容器中的单独文件(文本、属性列表、XML、JSON 等),在数据库更改时将它们写出来,并且仅在系统告诉您它们已创建或更改时才导入它们。

总之,您的选择是迁移到 Core Data 或自己编写同步解决方案。哪一个最好取决于您的应用程序的细节。

于 2011-11-15T19:36:54.497 回答