【问题标题】:NSPersistentStoreCoordinator has no persistent store - happens occasionallyNSPersistentStoreCoordinator 没有持久存储 - 偶尔发生
【发布时间】:2013-10-31 00:36:55
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: sqlite core-data ios7


    【解决方案1】:

    添加了这本词典 -

    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。这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 2013-03-07
      • 2016-02-04
      • 2020-05-30
      • 2012-08-18
      • 2014-10-15
      相关资源
      最近更新 更多