Mik*_*e S 3 iphone core-data mapping-model
我有一个广泛使用CoreData API的应用程序.我正在开发一个更新版本,为实体添加一些字段.由于架构更改,我的应用程序在加载时崩溃(除非我吹掉私有存储并重新启动).
问题是当客户升级到新版本时,我不介意在第一次加载应用程序时对其数据运行升级程序,但我甚至无法加载它,因为CoreData不喜欢架构更改.
有没有办法告诉CoreData"它确定..不要担心架构更改"?因为我只添加了字段而没有重命名或删除任何内容.
您可能应该获得Marcus Zarra的核心数据手册的副本,并阅读有关迁移的内容(第5章).但是,如果不这样做,有一些很好的基础知识.首先,您需要在更新的应用中使用旧模型(架构)和新模型.其次,您需要确保将新模型标记为"当前模型".第三,您需要确保以这样一种方式创建NSPersistentStoreCoordinator,使其自动从现有模型(从磁盘加载)映射到新模型.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (persistentStoreCoordinator)
return persistentStoreCoordinator;
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyDataStore.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
// Use mapping model
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:options
error:&error])
{
[NSApp presentError:error];
}
return persistentStoreCoordinator;
}
Run Code Online (Sandbox Code Playgroud)
更新 您的新应用中的旧模型需要与旧应用中的模型完全相同.如果您不确定是这种情况,那么您可以采取一些步骤来确保.我这样做的方式有点涉及 - 但是如果/当你认为这会有所帮助时我会概述它.
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |