Core Data迁移失败后,SQLite文件会发生什么?

时间:2015-04-10 21:59:47

标签: ios core-data

如果核心数据迁移失败,因为它缺少模型映射并且会抛出 CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///var/mobile/Containers/Data/Application/A887A5A9-BF8E-4678-8F19-465B858A424A/Documents/fiji-sql-v1 options:{

稍后会在错误消息中显示!!Unable to migrate store!! — {....... lots of entities and hash values later... NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( "Version 15.0" ); NSStoreType = SQLite; NSStoreUUID = "CDC37692-901E-4A6A-B2B2-D3A5C48AE03F"; "_NSAutoVacuumLevel" = 2;

我的新版本是16.0,旧版本是15.0。我想知道是否仍然可以访问旧的核心数据模型并映射它,或者该文件是否已被覆盖或删除。

编辑:这是完整错误的link

这是我的核心数据选项

NSDictionary *sqliteOptions =
@{
    @"synchronous" : @"0",
    @"fullfsync" : @"0"
};

//
//lightweight migrations are handled here
//
NSDictionary *options = 
    @{
        NSMigratePersistentStoresAutomaticallyOption: @YES,
        NSInferMappingModelAutomaticallyOption: @YES,
        NSSQLitePragmasOption: sqliteOptions
    };

1 个答案:

答案 0 :(得分:0)

获得整个错误消息会很有用。但是,加载持久性存储时的第一步是将存储中的模型散列与当前模型的模型散列进行比较,并查看它们是否匹配。如果他们不匹配......

  • 如果您指定了自动迁移,Core Data会尝试这样做,首先查看模型以查看是否可以迁移。
  • 如果您未指定自动迁移,Core Data将根据版本哈希查找模型映射。

如果需要映射模型但不存在,则Core Data会放弃并单独留下持久存储。持久性存储应该保持不变,因为没有描述如何更改它的信息。因此,您的数据可能没有改变,但如果没有完整的错误消息,则很难确定。