Iphone 核心数据轻量级迁移问题

Iphone 核心数据轻量级迁移问题,iphone,Iphone,我的应用程序当前在应用程序商店中,我正在使用数据模型中添加的单个属性对其进行更新。我添加了一个模型版本并将其设置为当前版本 一切正常,但当我在包含数据的旧版本上测试安装新版本的应用程序时,该应用程序无法加载,并且没有错误消息。它将继续失败(只是在屏幕上短暂闪烁),直到我重新启动设备,或通过XCode或iTunes再次安装更新的应用程序,然后应用程序运行正常,数据已正确迁移 我担心的是,如果这种情况发生在客户身上,他们会在重新安装之前删除应用程序,并丢失所有数据。有人有什么见解吗?谢谢你的帮助 谢

我的应用程序当前在应用程序商店中,我正在使用数据模型中添加的单个属性对其进行更新。我添加了一个模型版本并将其设置为当前版本

一切正常,但当我在包含数据的旧版本上测试安装新版本的应用程序时,该应用程序无法加载,并且没有错误消息。它将继续失败(只是在屏幕上短暂闪烁),直到我重新启动设备,或通过XCode或iTunes再次安装更新的应用程序,然后应用程序运行正常,数据已正确迁移

我担心的是,如果这种情况发生在客户身上,他们会在重新安装之前删除应用程序,并丢失所有数据。有人有什么见解吗?谢谢你的帮助

谢谢, 我在应用程序委托中使用以下代码进行数据迁移:

- (NSManagedObjectModel *)managedObjectModel {
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    NSString *path = [[NSBundle mainBundle] pathForResource:@"DataStore" ofType:@"momd"];
    NSURL *momURL = [NSURL fileURLWithPath:path];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
    return managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }
    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"DataStore.sqlite"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:storePath]) {
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"DataStore" ofType:@"sqlite"];
        if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
        }
     }
     NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
     NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], 
     NSMigratePersistentStoresAutomaticallyOption, 
     [NSNumber numberWithBool:YES], 
     NSInferMappingModelAutomaticallyOption, nil];     
     NSError *error;
     persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
     if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
         // Update to handle the error appropriately.
         NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
         exit(-1);  // Fail
    }         
    return persistentStoreCoordinator;
}

是否确实未对模型的早期版本进行任何更改?这种行为听起来像是核心数据找不到设备上持久存储的模型

启动包含旧版本永久存储的应用程序时,您应该能够在控制台日志中看到任何核心数据错误


您在什么时候添加了新属性?如果在创建新版本之前添加了该属性,则旧版本和新版本都将具有该属性。检查旧模型并确保新属性不存在。

不要忘记,要使迁移工作正常,应用程序中还需要可用的源架构和目标架构。

感谢您的回复,我再次查看了数据模型,它看起来是正确的。我还回到了以前发布的版本,并再次添加了一个新的数据版本,结果相同。您是否有任何建议,说明为什么第一次基本上不起作用,但第二次成功迁移后效果良好?我必须做些什么来确保它在第一次工作,也许原始数据模型没有被正确读取,或者什么?当然,它是第一次设计工作的。我已经在我正在构建的应用程序中成功地使用了这种迁移,没有问题。迁移发生时,是否可能未正确初始化新创建的属性。i、 e.您是否希望在插入而不是提取时设置某些值?您是否已配对应用程序,以便它除了尝试迁移和显示简单的视图控制器外,不会执行任何操作?迁移后访问数据似乎是导致崩溃的原因。谢谢,是的,它们都在那里。同样,迁移工作正常,新属性可用,但我必须安装两次应用程序或重置设备才能启动应用程序。