iOS 7 上的核心数据迁移属性偏移

Core Data Migration properties offset on iOS 7

我正在从旧版本的核心数据模型迁移到新版本。我只是为已经存在的实体添加一些新属性。我受到这个教程的启发,为我将来需要的迁移做了一个渐进式迁移机制。

core-data-migration

我有一个问题只发生在 iOS 7。我在 iOS 7.1.2 和 iOS 7.0.1 上进行了测试。

问题 是在迁移之后所有属性都得到这样的偏移量:

迁移前:

Entity.prop1 = value1

Entity.prop2 = value2

Entity.prop3 = value3

迁移后:

Entity.prop1 = value2

Entity.prop2 = value3

Entity.prop3 = nil

我尝试过使用 NSEntityMigrationPolicy 和不使用它手动进行迁移,但结果仍然相同。在 iOS 8 设备上运行良好。

我检查了 SQLITE

你知道为什么会这样吗?

数据库的 journal_mode 是 WAL。

问题是 sql 数据库有一个 .sql-wal 文件,它在迁移过程中丢失了,给我留下了损坏的数据库。

我通过在迁移前将日志模式从 WAL 更改为 DELETE 解决了这个问题:

NSError *WALToDELETEMigrationError = nil;
NSDictionary *options = @{NSSQLitePragmasOption: @{@"journal_mode": @"DELETE"}};

NSPersistentStoreCoordinator *tempPersistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:oldModel];

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[LVCoreDataController FilesStoreDirectory] error:nil];

if (![tempPersistentStoreCoordinator addPersistentStoreWithType:type configuration:nil URL:sourceStoreURL options:options error:&WALToDELETEMigrationError]) {
    NSLog(@"%@", WALToDELETEMigrationError);
}