1

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

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

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

我怎么解决这个问题?谢谢。

4

2 回答 2

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进行交互。在这种情况下,我使用该函数来获取商店。

于 2013-07-08T12:57:59.793 回答
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);
}
于 2016-10-05T08:15:50.807 回答