iOS核心数据轻量级迁移

时间:2012-12-12 17:53:21

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

我遇到了核心数据轻量级迁移的问题。 将第一版模型的应用程序提交给AppStore。 然后是版本2的数据模型(提交)。 最后,经过一些更改,我添加了模型的第3版并将其提交给AppStore。

一切都在测试设备上运行良好,因为迁移是一步一步完成的(v1 - v2 - v3)。

但它对于从AppStore更新应用程序的用户不起作用,例如它尝试从版本1迁移到3(跳过版本2 )。

我该如何解决这个问题? 感谢。

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);
}