改变核心数据模型:复古兼容性

我一直在用coredata来解决这个问题,这让我感到非常紧张,因为它应该是直接的

我目前正在开发这个应用程序的第一个版本,显然我保持在这里和那里的核心数据模型tweeking,

但是每次更改核心数据模型时,都需要卸载应用程序并重新安装新版本。

这只是我可以通过,但一旦发布,我需要能够改变更新的应用程序没有我的用户重新安装。

我错过了什么,

是否有一些我需要写的代码告诉核心数据如何修改现有的持久性数据到新的?

谢谢你的帮助

贾森

核心数据模型 – 迁移 – 向当前数据模型添加新的属性/字段 – 不需要模拟器或应用程序的重置

脚步:

1)从编辑器创build模型版本 – 给它任何有意义的名字,如ModelVersion2

2)转到该模型版本,并对您的模型进行更改。

3)现在转到YourProjectModel.xcdatamodeld并将当前版本设置为新创build的版本。

4)将下面的代码添加到你正在创build持久协调器的地方 –

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

并设置选项值作为方法的选项 –

 [__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error] 

就我而言,它看起来像这样:

 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (__persistentStoreCoordinator != nil) { return__persistentStoreCoordinator; } NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"LGDataModel.sqlite"]; NSError *error = nil; __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; if (! [__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return__persistentStoreCoordinator; } 

链接: http : //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmInitiating.html#//apple_ref/doc/uid/TP40004399-CH7-SW1

您需要阅读Core Data版本和迁移 。 这里有一个博客文章解释得很好:

http://www.timisted.net/blog/archive/core-data-migration/