core-data - 支持 iCloud 的 Core Data 应用程序中的数据快照?

标签 core-data icloud snapshot

我的应用程序通过 iCloud 同步和备份其数据(为此目的,我使用 iCloudCoreDataStack)。当我的应用程序处理用户创建的重要数据时,我希望通过不时创建快照的能力来提供额外的安全网,以便稍后恢复。

我不是在谈论撤消一两个单独的更改,而是在谈论真实的快照,带有时间戳并以保存方式存储。

由于我正在利用 iCloud 同步,因此我不能简单地交换应用程序中使用的 sqlite 存储。我想我必须删除当前上下文中的每个对象,创建从快照恢复的对象并保存上下文。然后,设备也会将更改推送到 iCloud。

我正在考虑以下场景:

  1. 应用程序可以正常运行,无需选择创建快照(这只是用户可选的安全功能)。
  2. 如果用户选择不时创建快照,系统会要求他输入 Dropbox 登录凭据(已实现)。
  3. 有时,我的应用程序会创建一个后台线程,其中将设置第二个商店和第二个 MOC(以及第二个 PSC?)。每个对象及其关系都被复制到第二个 MOC 中。第二个 MOC 被保存,持久存储将被复制到 Dropbox,线程将结束。
  4. 如果用户想要恢复快照并放弃创建快照后所做的所有更改,我的应用将通过反向执行第 3 点中所述的操作来重建数据。

有什么想法吗?这是要保存的吗?有什么注意事项需要考虑吗(尤其是与 iCloud 一起)?有人以类似的方式做到过吗?


编辑:

按照上述步骤,我成功创建了商店的副本。在一些初步尝试中,商店的娱乐似乎也奏效了。但是,我仍然担心加载商店文件的方式(将旧文件拉走,然后用我保存的文件替换)。

但是,我遇到过 Apple 的“另存为...”或“重新定位”方法

NSDictionary *options = @{
    NSPersistentStoreRemoveUbiquitousMetadataOption: @YES
};
NSPersistentStore *copy = [psc migratePersistentStore:currentiCloudStore
                                                toURL:url
                                              options:options
                                             withType:NSSQLiteStoreType
                                                error:&error];

这将删除所有与 iCloud 相关的元数据,还会从协调器中删除当前存储(我不希望这样),并将新创建的存储添加到 PSC(我也不希望这样)。

更好的方法是什么?我当前的方法还是苹果内置的“另存为.../重新定位”?我的重点是稍后加载快照,无论 iCloud 是否启用。

最佳答案

我觉得你的基本方法很好。我还使用 iCloudCoreDataStack,我认为这是一个强大的解决方案。

如果您想保存新商店,我不明白为什么您要遍历所有对象并重新创建它们。只需保存所有内容,锁定商店,制作本地副本,解锁商店(用户现在可以继续工作),然后将商店复制到 DropBox。恢复时,用下载的商店覆盖现有商店(如果在同一设备上且沙箱仍然存在,则无需下载)。此时您可能还需要重置 iCloud 商店。

话虽这么说,如果您已经在迭代对象图,您可能会用它来做一些额外的事情,这些事情可能会变得有用。您可以将整个对象图转换为 JSON 并将其存储为文本文件(如果没有可转换或二进制属性)。您的数据现在可供人类通过更多方式和更多平台读取和使用。

关于core-data - 支持 iCloud 的 Core Data 应用程序中的数据快照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782572/

相关文章:

cocoa - CoreData 一对多

ios - 从 TableView 中删除行

ios - CoreData 不能正确 'Create NSManagedObject Subclass' Swift

ios - 在 iOS 开发人员面板中创建 iCloud 标识符

mysql - rhc 保存快照失败

MySQL:回滚时间更长?

ios - UIView 中的 MPMoviePlayerController

objective-c - NSFileManager setUbiquitous:是,我的文件陷入了困境!为什么?

iOS:对于用户来说,CloudKit 登录是什么样的?

amazon-web-services - AWS RDS "migrate snapshot"文档