iOS 7 上的核心数据迁移属性偏移
Core Data Migration properties offset on iOS 7
我正在从旧版本的核心数据模型迁移到新版本。我只是为已经存在的实体添加一些新属性。我受到这个教程的启发,为我将来需要的迁移做了一个渐进式迁移机制。
我有一个问题只发生在 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);
}
我正在从旧版本的核心数据模型迁移到新版本。我只是为已经存在的实体添加一些新属性。我受到这个教程的启发,为我将来需要的迁移做了一个渐进式迁移机制。
我有一个问题只发生在 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);
}