Iphone 核心数据更新模型与应用程序更新?

Iphone 核心数据更新模型与应用程序更新?,iphone,xcode,Iphone,Xcode,使用核心数据的每个人都知道这样一条信息:“用于打开存储的模型与用于创建存储的模型不兼容” 然后,我必须从模拟器中删除我的应用程序,并再次重建它 我的问题是,如果我提交一个应用程序V1.0,然后在V1.1中向核心数据添加一些实体,这是否意味着更新到1.1的1.0用户将清除其数据?您需要为您的模型创建一个新的模型版本,并迁移数据库。如果模型更改在所需的更改范围内,则可以进行轻量级迁移。如果没有,则需要告诉核心数据如何迁移数据。查看迁移文档:在您的案例中,它听起来像是旧数据模型的简单扩展。如果您真的添

使用核心数据的每个人都知道这样一条信息:“用于打开存储的模型与用于创建存储的模型不兼容”

然后,我必须从模拟器中删除我的应用程序,并再次重建它


我的问题是,如果我提交一个应用程序V1.0,然后在V1.1中向核心数据添加一些实体,这是否意味着更新到1.1的1.0用户将清除其数据?

您需要为您的模型创建一个新的模型版本,并迁移数据库。如果模型更改在所需的更改范围内,则可以进行轻量级迁移。如果没有,则需要告诉核心数据如何迁移数据。查看迁移文档:

在您的案例中,它听起来像是旧数据模型的简单扩展。如果您真的添加了一些新的实体,甚至是新的类,那么所谓的leightweight迁移就是正确的方法

实际上,在这种情况下,您几乎无需做任何事情,只需在原始模型的基础上创建第二个模型。重要的是,你有两个模型,然后应用程序将只加载你的第一个版本没有任何问题,以及新版本

别忘了把你的新型号标为新型号

创建新模型时请务必小心,因为删除模型确实很麻烦

您的代码将非常类似于此:

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


- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

    // Allow inferred migration from the original version of the application.
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"DBName.sqlite"]];

    NSError *error = nil;

    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl 
                                                        options:options error:&error]){
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);


    }
    return persistentStoreCoordinator;
}

- (NSManagedObjectModel *) managedObjectModel {
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    return managedObjectModel;
}