【问题标题】:Xcode8 and Core Data automatic lightweight migrationXcode8 和 Core Data 自动轻量级迁移
【发布时间】:2016-10-01 17:10:33
【问题描述】:

我一直在尝试使用 Xcode8 为我的 Core Data 架构执行轻量级迁移,但遇到了一些奇怪的问题。更新后第一次加载商店时,选项字典中的NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption 标志都设置为YES,我遇到了这个错误:

2016-10-01 09:59:17.307862 CJournal[1162:549816] loadLocalStoreIntoPSC using store = file:///private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite
2016-10-01 09:59:18.373568 CJournal[1162:549816] [error] error: Failed to delete support directory for store: /private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/.ContactsJournal.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3
2016-10-01 09:59:18.656164 CJournal[1162:549816] [error] error: CoreData: error: (migration) migration failed with error (null)
2016-10-01 09:59:18.664001 CJournal[1162:549816] [error] error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite options:{
    NSInferMappingModelAutomaticallyOption = 1;
    NSMigratePersistentStoresAutomaticallyOption = 1;
} ... returned error Error Domain=NSSQLiteErrorDomain Code=8 "(null)" UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite, Source database Path=/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/.ContactsJournal.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3, reason=Failed to replace destination database} with userInfo dictionary {
    NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite";
    "Source database Path" = "/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/.ContactsJournal.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3";
    reason = "Failed to replace destination database";
}

iOS10 模拟器和 iOS10 设备都会发生这种情况。奇怪的是,第二次运行我运行该应用程序并尝试迁移,它运行良好,没有任何错误!

这是我用来添加商店的代码:

NSMutableDictionary *options = [NSMutableDictionary dictionaryWithObjectsAndKeys:@YES, NSMigratePersistentStoresAutomaticallyOption, @YES, NSInferMappingModelAutomaticallyOption, nil];

NSPersistentStore *newStore = [self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:localStoreURL options:options error:&error];

我也尝试在“启动时传递的参数”中使用-com.apple.CoreData.MigrationDebug 1 标志,但它不会产生任何可能有用的输出。

知道可能出了什么问题,或者如果迁移由于某些验证问题而失败,如何调试?

【问题讨论】:

    标签: ios core-data xcode8 core-data-migration


    【解决方案1】:

    我发现了问题......在轻量级迁移之前,我正在备份现有数据库,因此我创建了一个NSPersistentStoreCoordinator(与通常的堆栈分开)并将persistentStore添加到它没有任何轻量级迁移选项。这显然会锁定存储文件,即使在备份过程完成后,也会阻止主 Core Data 堆栈的persistentStoreCoordinator 上的迁移。修复是从备份persistentStoreCoordinator 中删除persistentStore。这可以确保迁移工作正常,addPersistentStoreWithType 此时不会抛出错误。

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2011-01-19
      • 2014-10-06
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多