1

这是我之前的问题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) 当我的应用程序在应用商店中时,我如何防止这种情况发生,并且由于某种原因我决定要向商店添加另一个实体,或者向现有实体添加另一个属性?是否有“如果 x 不存在则创建它”方法?

4

1 回答 1

1

要完全删除该应用程序,应使用通常的方法将其删除,即按住直到它摆动并点击删除按钮。然后连接到 iTunes。可能是 iTunes 每次都在恢复应用程序及其备份数据。

为了支持稍后添加新实体,您需要使用此处描述的版本控制和自动轻量级迁移:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1

基本上,您使用 Xcode 中的Design->Data Model菜单项创建数据模型的新版本(Xcode 4 中的编辑器->“添加模型版本”),然后进行一些代码更改。这将导致 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];
于 2010-04-23T08:06:28.773 回答