Objective c 使用更新的核心数据模型更新iOS应用程序

Objective c 使用更新的核心数据模型更新iOS应用程序,objective-c,ios,core-data,Objective C,Ios,Core Data,我的第一款iOS应用程序的1.1版快完成了,在这个版本中,我对我的核心数据模型做了两个小改动。更具体地说,我在一个表中添加了两个属性。这是我的第一个核心数据应用程序,因此我的第一个核心数据更新到了一个实时应用程序,我有点担心发布代码可能对我当前的用户不起作用。由于这是一个小的更新,我猜苹果自动迁移方法可以,但我不想猜测 相关代码如下所示: NSError *error = nil; __persistentStoreCoordinator = [[NSPersistentStoreCoordin

我的第一款iOS应用程序的1.1版快完成了,在这个版本中,我对我的核心数据模型做了两个小改动。更具体地说,我在一个表中添加了两个属性。这是我的第一个核心数据应用程序,因此我的第一个核心数据更新到了一个实时应用程序,我有点担心发布代码可能对我当前的用户不起作用。由于这是一个小的更新,我猜苹果自动迁移方法可以,但我不想猜测

相关代码如下所示:

NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithBool:YES],   NSMigratePersistentStoresAutomaticallyOption,
                        [NSNumber numberWithBool:YES],  NSInferMappingModelAutomaticallyOption, nil];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{

    //NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}    
if (currentPage.inputType == @"drawing") {
    [pageView changeToDrawing];
} else if (currentPage.inputType == @"text") {
    [pageView changeToText];
} else {
    currentPage.inputType = @"text";
    [pageView changeToDrawing];
}
在1.1中,我添加了
NSDictionary*选项

在我的视图控制器中,我确保所需的行不为零,如下所示:

NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithBool:YES],   NSMigratePersistentStoresAutomaticallyOption,
                        [NSNumber numberWithBool:YES],  NSInferMappingModelAutomaticallyOption, nil];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{

    //NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}    
if (currentPage.inputType == @"drawing") {
    [pageView changeToDrawing];
} else if (currentPage.inputType == @"text") {
    [pageView changeToText];
} else {
    currentPage.inputType = @"text";
    [pageView changeToDrawing];
}
基本上,这些更改是否足够,或者我是否必须做其他事情?

关于核心数据版本控制,回答您的问题

总而言之,您需要向项目中添加新的模型版本。这对于迁移过程是必要的

编辑

上面的链接已更改,将重定向到以下链接:


如果一切都失败了,谷歌:。

谢谢你的回答,我有一个相关的问题。我在创建新模型版本之前添加了这些属性,我应该从1.0版本中删除这些新属性,并且只在2.0数据模型版本中使用它们,还是不重要?谢谢当然,您应该将它们从1.0中删除并添加到下一个版本。事实上,我最近被这件事咬了一口。1.0应该与当前部署的完全相同,否则将出现异常。这包括属性和关系。太棒了!很高兴我能帮忙。顺便说一句,一个快速提示:最好测试迁移过程。从app store安装该版本,然后在其上运行最新版本(您的项目)。这将是一个真正的测试,以检查它的工作。是的,谢谢,我这样做了,它的工作。没有崩溃,数据也在那里。不过,必须对视图控制器进行一个小的更改,所以这是一个很好的提示。:)