iphone - 核心数据迁移失败,错误为 : Failed to save new store after first pass of migration

标签 iphone core-data mapping-model

过去,我已经成功实现了从数据模型版本 1 到版本 2 的自动迁移。现在,使用 SDK 3.1.3,从版本 2 迁移到版本 3 失败,并出现以下错误:

Unresolved 错误错误域=NSCocoaErrorDomain代码=134110 UserInfo=0x5363360“操作无法完成。(Cocoa错误134110。)”,{ NSUnderlyingError =错误域=NSCocoaErrorDomain代码=256 UserInfo=0x53622b0“操作无法完成。(Cocoa错误256。)”; Reason =“第一次迁移后无法保存新存储。”; }

我尝试过使用 NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption 进行自动迁移,也尝试过仅使用 NSMigratePersistentStoresAutomaticallyOption 进行迁移,提供从 v2 到 v3 的映射模型。

我看到记录了上述错误,并且应用程序中没有可用的对象。但是,如果我退出应用程序并重新打开它,一切都已就位并正常工作。

我使用的核心数据方法如下

- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }



    NSString *path = [[NSBundle mainBundle] pathForResource:@"MYAPP" ofType:@"momd"];
    NSURL *momURL = [NSURL fileURLWithPath:path];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

    return managedObjectModel;

}
- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }


    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}



- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }


    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP.sqlite"]];


  NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
  [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
  [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

  NSError *error = nil;
  persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
   if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
        // Handle error
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
   }  


return persistentStoreCoordinator;

}

在模拟器中,我看到这生成了 MYAPP~.sqlite 文件和 MYAPP.sqlite 文件。我尝试删除 MYAPP~.sqlite 文件,但是

BOOL oldExists = [[NSFileManager defaultManager] fileExistsAtPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP~.sqlite"]];

总是返回NO。有什么线索吗?难道我做错了什么? 预先感谢您。

最佳答案

我也遇到了这个问题,在阅读了尽可能多的苹果文档和网络帖子后,我发现似乎没有答案。就我而言,手动迁移也有效,但是当我打开一个新的协调器时,它会给出与您相同的错误。我最终决定回到数据模型的上一个工作版本,并进行一系列小的更改/版本,看看它在哪里破坏了自动迁移功能,以进一步深入研究它,结果证明它没有。现在我可以毫无问题地添加实体、属性和关系,并且它们会自动迁移。您是否有机会删除数据模型的临时版本?

关于iphone - 核心数据迁移失败,错误为 : Failed to save new store after first pass of migration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2714226/

相关文章:

ios - iMessage 扩展和 CoreData

core-data - 使用 Core Data 存储 unsigned long long

cocoa - 核心数据迁移失败,错误为 "Can' t find model for source store”,但存在源的 ManagedObjectModel

iphone - UIAlertView 按钮( subview )未在 iOS 7 中显示

iphone - 如何在父 ScrollView 中调整 webview?

ios - 我应该将图像保存在 Core Data 中还是应该使用 SDWebImage

iphone - 通过迁移将核心数据索引添加到某些属性

iphone - 使用映射模型在核心数据对象模型之间迁移

iphone - 如何更改iOS Simulator SDK

ios - 以编程方式在 iOS 中切换 AirPlane 模式