我已经花费了相当长的时间来创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? 我将不胜感激关于这些问题的答案可以分享的任何见解。
错误说明 我有一个使用核心数据(由SQLite支持)和以下NSManagedObject子类本地存储的一些应用程序 import CoreData @objc(ScoutingEventData) class ScoutingEventData: NSManagedObject { @NSManaged var id: String? @NSManaged var type: String? @NSManaged var entityId: String? @NSManaged var oldStateJson: NSData? @NSManaged var newStateJson: NSData? @NSManaged var eventDate: NSDate? func toInsertEvent() throws -> ScoutingEvent.Insert { guard let id = id else { fatalError("events should have an event id") } guard let […]
嗨支持专家…我正在写我的第一个iPad应用程序,并有一个工作testing版副本,分析一个XML文件,以创build一个UIManagedDocument核心数据数据库在应用程序启动。 然而,这需要很长时间,我想这样做一旦脱机,并包括最初的数据直接到我的应用程序包。 毋庸置疑,我打了一堵墙试图让它工作。 我第一次按照命令行实用工具的方法看到这里这工作,直到我导入.sqlite文件,并试图编辑persistentStoreCoordinator方法 – 我使用UIManagedDocument ,所以没有在我的AppDelegate的persistenStoreCoordinator方法 – 本页报价“在某些情况下,您不必编写任何代码来加载模型,如果您在Mac OS X上使用基于文档的应用程序,则NSPersistentDocumentpipe理为您查找和加载应用程序模型的任务。 然后我尝试从模拟器中的应用程序的工作版本复制UIManagedDocument按照此StackOverFlow问题这似乎工作,但persistentStore是空的,因此我的表也是。 这正是这里所要问的问题,但是对这个问题的回答让我马上回到修改我没有的NSPersistentStoreCoordinator方法。 我添加了一个testingNSFetchRequest到我的代码中,我从应用程序包中复制UIManagedDocument到文档目录 – 所以我知道我的应用程序包中的UIManagedDocument是空的。 我已经尝试拖放从发现者和应付使用terminal – persistentStore文件似乎被正确地移动和大小106 KB,但我仍然在我的应用程序中得到一个空的数据库。 任何build议如何让这个工作? 我需要使用configurePersistenStoreCoordinatorForURL:ofType:modleConfiguration:StoreOptions:error:根据UIManagedDocument类参考 – 如果是的话,我该怎么做呢? 我是否需要将一些核心数据方法添加到我的AppDelegate中,以便我可以修改persistenStoreCoordinator方法 – 如果有的话,该方法还需要做什么? 我是否更好地使用我的命令行创build的.sqlite数据库或persistentStore UIManagedDocument似乎使用?
我试图使用[NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:options:error:]从iCloud中删除核心数据。 但是我得到奇怪的输出: __93+[NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:options:error:]_block_invoke(1982): CoreData: Ubiquity: Unable to move content directory to new location: file:///private/var/mobile/Library/Mobile%20Documents/<UBIQUITY_ID>/ New: file:///private/var/mobile/Library/Mobile%20Documents/OldUbiquitousContent-mobile~C9439AD0-1E87-4977-9C68-0674F5E2E93B Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn't be completed. (Cocoa error 513.)" UserInfo=0x181ab790 {NSSourceFilePathErrorKey=/private/var/mobile/Library/Mobile Documents/<UBIQUITY_ID>, NSUserStringVariant=( Move ), NSFilePath=/private/var/mobile/Library/Mobile Documents/<UBIQUITY_ID>, NSDestinationFilePath=/private/var/mobile/Library/Mobile Documents/OldUbiquitousContent-mobile~C9439AD0-1E87-4977-9C68-0674F5E2E93B, NSUnderlyingError=0x181aab50 "The operation couldn't be completed. Operation not permitted"} 这是什么意思? 如何避免它? 我正在开发iCloud禁用/启用function。 详情在这里 更新: NSDictionary *iCloudOptions […]
我在应用程序商店中有一个应用程序,正在使用日志logging服务来获取崩溃日志和关联的日志数据。 我看到一个间歇性的崩溃(受影响的用户数量很less,每个用户的崩溃数量很低),但是让我感到困惑。 这些崩溃发生的事情如下: 应用程序启动并初始化核心数据堆栈 应用程序尝试使用以下代码( storeURL有效)将SQL存储添加到NSPersistentStoreCoordinator: NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption : @(YES), NSInferMappingModelAutomaticallyOption : @(YES) }; sqlStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]; 添加此存储时发生以下错误之一: NSError: 域名= NSCocoaErrorDomain 代码= 256“操作无法完成(cocoa错误256.)” UserInfo = 0x1dd946a0 {NSUnderlyingException =授权被拒绝,NSSQLiteErrorDomain = 23} 要么 NSError: 域名= NSCocoaErrorDomain 代码= 256“操作无法完成(cocoa错误256.)” UserInfo = 0xc6525d0 {NSUnderlyingException =磁盘I / O错误,NSSQLiteErrorDomain = 10} 在这种情况之后,应用程序将崩溃B / […]