我遇到了核心数据轻量级迁移的问题。 将第一版模型的应用程序提交给AppStore。 然后是版本2的数据模型(不提交)。 最后,经过一些更改,我添加了模型的第3版并将其提交给AppStore。
一切都在测试设备上运行良好,因为迁移是一步一步完成的(v1 - v2 - v3)。
但它对于从AppStore更新应用程序的用户不起作用,例如它尝试从版本1迁移到3(跳过版本2 )。
我该如何解决这个问题? 感谢。
答案 0 :(得分:0)
这是一个强力解决方案,但删除商店是解决问题的一个选项:
// Setup CoreData with MagicalRecord && remove CoreData store
// The flag is used to perform the delete just once
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"CORE_DATA_FLAG01"]) {
NSURL *storeURL =[NSPersistentStore MR_urlForStoreName:@"YourStore.sqlite"];
LOG(@"%@", storeURL);
NSFileManager *fm = [[NSFileManager alloc] init];
NSError *error = nil;
[fm removeItemAtURL:storeURL error:&error];
if (error) {
LOG(@"error %@", error);
} else {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"CORE_DATA_FLAG01"];
}
}
我正在使用MagicalRecord与CoreData进行交互。在这种情况下,我使用该函数来获取商店。
答案 1 :(得分:0)
通过轻量级迁移,如果V1-> V2工作且V2-> V3工作,则不应该直接从V1-> V3进行问题 - 除非你搞砸了。 :)
启动V1版本,然后切换到V3并逐步调试问题。
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption: @YES,
NSInferMappingModelAutomaticallyOption: @YES
};
NSError *error;
NSPersistentStore *persistentStore = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error];
if (!persistentStore) {
NSLog(@"migration failed: %@", error);
}