我正在尝试更新一个实现核心数据存储的应用程序。我正在向其中一个实体添加属性。
我将以下代码添加到我的委托类中:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Shoppee.sqlite"]];
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(@"Error: %@",error);
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;
}
这是来自以下 URL:Doc http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1
执行代码时出现以下错误:
2009-12-01 20:04:22.877
Shopee[25633:207] 错误:错误
域=NSCocoaErrorDomain 代码=134130
UserInfo=0x1624d20“操作无法完成。(可可错误
134130.)" 2009-12-01 20:04:22.879 Shoppee[25633:207] 未解决的错误
错误域=NSCocoaErrorDomain 代码=134130 UserInfo=0x1624d20
“操作无法完成。(Cocoa 错误 134130。)”,{
URL = 文件://localhost/Users/Eric/Library/Application%20Support/iPhone%20Simulator/User/Applications/A8A8FB73-9AB9-4EB7-8F83-82F5B4467AF1/Documents/MyApp.sqlite;
元数据={
NSPersistenceFrameworkVersion = 241;
NSStoreModelVersionHashes = {
项目 = ;
存储 = ;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "8DC65301-3BC5-42BE-80B8-E44577B8F8E1";
};
Reason = "找不到源商店的模型"; }
看来我需要以某种方式包含原始数据模型,但我不确定如何做到这一点。有什么建议么?
回顾/完整指南:
-
在进行任何更改之前,请创建新的模型版本。
在 Xcode 4 中:选择您的.xcdatamodel
-> 编辑器 -> 添加模型版本。
在 Xcode 3 中:设计 -> 数据模型 -> 添加模型版本。
你会看到一个新的.xcdatamodel
是在你的.xcdatamodeld
文件夹(如果没有,也会创建).
Save.
选择您的新.xcdatamodel
并根据以下内容进行您希望采用的更改the 轻量级迁移文档 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweightMigration.html#//apple_ref/doc/uid/TP40004399-CH4-SW1.
Save.
-
将当前/活动模式设置为新创建的模式。
随着.xcdatamodeld
选定的文件夹:
在 Xcode 4 中:实用工具侧边栏 -> 文件检查器 -> 版本化核心数据模型 -> 选择新架构。
在 Xcode 3 中:设计 > 数据模型 > 设置当前版本。
上面的绿色勾号.xcdatamodel
图标将移动到新架构。
Save.
-
实现必要的代码以在运行时执行迁移。
你在哪里NSPersistentStoreCoordinator
创建(通常是 AppDelegate 类),用于options
参数,替换nil
使用以下代码:
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]
运行您的应用程序。如果没有崩溃,您可能已经成功迁移:)
成功迁移后,可以删除迁移代码(步骤 7)。 (由开发者决定何时可以将已发布应用程序的用户视为已迁移。)
重要的:不要删除旧模型版本/架构。 Core Data需要将旧版本迁移到新版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)