这个问题是关于使用 Dropbox 在多个 iOS 设备之间同步一个 sqlite Core Data 存储。考虑这种安排:
一个应用程序使用一个核心数据存储,调用它
local.sql
,保存在应用程序自己的NSDocumentDirectory
该应用程序使用 Dropbox Sync API 来观察用户 Dropbox 中的某个文件,例如,
user/myapp/synced.sql
该应用程序观察
NSManagedObjectContextDidSaveNotification
,并在每次保存时复制local.sql
到user/myapp/synced.sql
,从而替换后者。当 Dropbox API 通知我们
synced.sql
更改时,我们或多或少地做了与第 3 部分相反的操作:拆除 Core Data 堆栈,替换local.sql
为synced.sql
,然后重新创建 Core Data 堆栈。同时,用户会在 UI 中看到“正在同步”或“正在加载”。
问题:
A. 这种安排是否非常低效,到了应该完全避免的程度?如果我们能保证数据库不大呢?
B. 这种安排是否有利于文件损坏?不仅仅是通过 deltas/changelogs 同步?如果是这样,请您详细解释为什么?