0

我一直在我的项目中使用核心数据,并在我的文档目录中使用 database.sqlite 数据存储文件。我的应用程序允许将此 sqlite 文件导出为备份以供以后恢复。备份工作正常。

我有一个从 iOS6 设备导出的备份文件。我想将此备份文件导入我的应用程序。我将文件作为邮件附件,我使用 open-in 使用应用程序打开它。在 ios6 或更早版本中运行良好。我曾多次尝试导入同一个文件,并且效果很好。

我最近将我的数据库架构更改为一个新版本,其中自动迁移能够很好地切换到新数据库。如果我的设备在 iOS6 中,我可以导入旧的数据库文件或现在导出的任何文件。我可以做任何次数。

现在,如果您将我的设备更改为 iOS7,我可以多次导入最近导出的文件。但是如果我尝试导入之前导出的旧文件,我可以导入一次。该应用程序运行良好。然后我尝试再次导入它,现在它从第二次尝试开始失败。给出标题中提到的错误。仅在 iOS7 中且仅来自连续第二次尝试。

我正在使用可怕的错误文档解压缩到导入的文件。然后我将现有的 sqlite 数据库文件替换为导入的数据库文件。每次都在 iOS6 中工作,第一次在 iOS7 中工作,但在 iOS7 中第二次尝试失败。

在执行导入之前,所有更改都已提交/保存,托管对象上下文已重置,持久存储协调器已重置。新文件取代了旧文件,并且已经工作了很长时间。该问题仅在第二次尝试使用从 iOS6 导出的相同文件时在 iOS7 中发现

任何帮助和查询将不胜感激。谢谢。

4

1 回答 1

0

添加了这本词典 -

NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary];
[pragmaOptions setObject:@"NORMAL" forKey:@"locking_mode"];
[pragmaOptions setObject:@"DELETE" forKey:@"journal_mode"];

到选项字典 -

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
                         pragmaOptions, NSSQLitePragmasOption, nil];

用于创建我的 persistentStoreCoordinator。这解决了我的问题。

于 2013-10-22T10:23:44.873 回答