Tag: 数据库 备份

如何使用当前的NSPersistentStore方法在本地和iCloud中创build可共享的Core Data .sqlite备份

我已经花费了相当长的时间来创build一个Core-Data备份的.sqlite文件的备份,并在本地和/或iCloud(无论用户喜欢什么)存储该备份以用于下载,恢复或分享。 让我先说一下,我并不是在谈论将持久存储转移到iCloud以供应用程序用作其数据源。 我只是问在这个问题上创build备份文件。 在2014年,苹果将核心数据SQLite商店的默认日记模式更改为WAL。 https://developer.apple.com/library/content/qa/qa1809/_index.html 随着这一变化,他们build议: 要安全地备份和还原Core Data SQLite存储,可以执行以下操作:使用以下NSPersistentStoreCoordinator类的方法(而不是文件系统API)备份和还原Core Data存储: – (NSPersistentStore *)migratePersistentStore 🙁 NSPersistentStore *)存储toURL:(NSURL *)URL选项:(NSDictionary *)options withType:(NSString *)storeType错误:(NSError **)错误 请注意,这是我们推荐的选项。 在此之前,我一直在使用NSFileManager来创build备份。 有了这个build议,我相信在本地创build备份的正确方法是添加一个新的持久性存储,然后使用NSPersistentStoreCoordinator方法addPersistentStoreWithType:configuration:URL:options:error将该持久性存储迁移到所需的备份位置migratePersistentStore:toURL:options:withType:error 。 我的问题有两个方面: 我以前会将我的数据压缩到NSData之前导出它,并将NSData直接写入文件。 我的文件扩展名将自定义到我的应用程序,通过电子邮件或其他iOS共享方法共享压缩数据。 使用migratePersistentStore:toURL:options:withType:error方法,我现在将得到一个.sqlite文件(及其相应的WAL文件等)在所需的位置,但我不知道如何共享此文件。 如果我压缩文件,不会有我失去了我努力保存的数据的危险,首先使用migratePersistentStore:toURL:options:withType:error ? 我相信是这样,但我确实希望让我的用户能够通过电子邮件等方式共享/保存备份,而现在我不知道该如何做到最好。 我很难理解如何使用migratePersistentStore:toURL:options:withType:error将文件备份到iCloud。 就像上面的共享示例一样,我看到我可以使用addPersistentStoreWithType:configuration:URL:options:error和migratePersistentStore:toURL:options:withType:error在本地获取所需的.sqlite副本,但如果我尝试上传本地文件到iCloud,我担心我会失去使用migratePersistentStore:toURL:options:withType:error工作保存的数据。 我一直在试图看看是否有一种方法可以/应该使用migratePersistentStore:toURL:options:withType:error将新创build的persistentStore直接移动到iCloud,但是我一直没能find任何关于如何这样做还是应该完成。 是否有一个特定的url,我需要用来表明persistentStore的目的地是iCloud? 我将不胜感激关于这些问题的答案可以分享的任何见解。