将现有的SQLite iOS应用程序迁移到iCloud:iCloud的原子性如何?

时间:2012-08-22 01:32:30

标签: ios icloud

我正在努力增强现有应用程序以使用iCloud,以便可以在多个设备上访问相同的数据。

我打算使用基于文档的存储并使用文件包(即表示为单个文件并由NSFileWrapper处理的文件目录)。

我的主要问题是:文件包更新是否保证是原子的?如果我打开应用程序并且单个文档包中的一些文件已经更改,iOS会下载它们,然后仅在所有子文件存在且就地时通知我的应用程序吗?或者存在文件一个接一个地出现的风险,让我有一个可能不一致的包?

此外,我现有的应用程序使用SQLite(不是通过Core Data,而是通过自定义包装器)。该应用程序的某些部分显然需要一个漂亮的索引SQL数据库来提高性能。因此,我的计划是使用iCloud数据作为参考存储,出于性能原因(或设备的其他严格本地区域)将SQLite数据库保留在Caches目录中,并根据iCloud中的内容更新数据库。用户在应用程序中所做的更改将记录在iCloud和本地数据库中。这是疯狂还是合理?

1 个答案:

答案 0 :(得分:0)

所以我对你的主要问题的答案是学术性的,因为我没有测试这个测试基础,但是......

如果您将目录视为单一实体,则使用该实体作为NSManagedDocument操纵的项进行协调。

我基于学习使用NSManagedDocument管理iCloud的笔记来回答这个问题:

// Conflict
// - what if a device detached from the network changed a document that another device changed?
//   and then the detached device re-attached and tried to apply the change and it conflicted?
//   one must manage the conflict by looking for the InConflict document state.
// - when it happens, a decision must be made which version of the document to use and/or
//   manage changes.  probably want to set NSManagedObjectContext's mergePolicy to other than
//   default (Error).
// - then update the old, conflicting NSFileVersion to no longer conflict (and remove those
//   versions).

(是的,我以Objective-c评论格式记笔记。)