这是我以前的问题here的后续内容。重置模拟器之前解决了我所有的麻烦,我已经完成了我的应用程序。
我在iPhone设备上安装应用时遇到了同样的问题。它选择了我的数据库的旧版本,其中没有第二个实体,当我尝试访问第二个实体时崩溃:
2010-04-22 23:52:18.860 albumCloud[135:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Image''
2010-04-22 23:52:18.874 albumCloud[135:207] Stack: (
843263261,
825818644,
820669213,
20277,
844154820,
16985,
14633,
844473760,
844851728,
862896011,
843011267,
843009055,
860901832,
843738160,
843731504,
11547,
11500
)
terminate called after throwing an instance of 'NSException'
我有两个问题:
1)我如何从手机中彻底删除我的应用程序以删除旧数据? (到目前为止,我已尝试删除常规应用程序,删除然后保留主页和电源进行重启,在运行应用程序时诅咒并威胁应用程序......所有内容)
2)当我的应用程序在App Store中时,如何防止这种情况发生?我出于某种原因决定我要将另一个实体添加到商店,还是将其他属性添加到现有实体?是否存在“如果x不存在则创建它”方法?
答案 0 :(得分:1)
要完全删除应用程序,请按常规方法删除它,即按住直到它摆动并点按删除按钮。然后连接到iTunes。可能是iTunes每次都在恢复应用程序及其备份数据。
要支持以后添加新实体,您需要使用版本控制和自动轻量级迁移,如下所述:
基本上,您使用Xcode中的Design->Data Model
菜单项(Xcode 4中的Editor->“Add Model Version”)创建数据模型的新版本,然后进行一些代码更改。这将导致Core Data自动将旧模型迁移到较新模型。您可以进行哪些类型的更改。您可以添加新实体,并将可选属性添加到现有实体,或者将默认值设置为必需属性。
让我感到震惊的一件事是,当您想要使用版本控制和迁移时,加载核心数据NSManagedObjectModel
的方式会发生变化。如果没有迁移,你可能会这样:
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
开始使用版本控制和迁移后,需要将其更改为:
NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName"
ofType:@"momd"];
NSURL *url = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease];