Cocoa-Touch,核心数据:尝试insertNewObjectForEntityForName时获取异常:inManagedObjectContext:

时间:2009-10-13 18:24:11

标签: iphone objective-c cocoa-touch

我正在关注this how-to在我的应用中实施核心数据存储:

我有Model.xcdatamodel定义Something模型。我使用XCode为该模型生成一个类 我已经在我正在尝试的.m文件中导入了这个类:

Something* s = (Something *)[NSEntityDescription insertNewObjectForEntityForName:@"Something" inManagedObjectContext:managedObjectContext];

但是这会导致以下错误: 2009-10-13 21:18:11.961 w9a[4840:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Something''

我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

就个人而言,我更喜欢以下方法:

// With some NSManagedObjectContext *context
NSEntityDescription *desc = [NSEntityDescription entityForName:@"Something" 
                                        inManagedObjectContext:context];
Something *s = [[[Something alloc] initWithEntity:desc
                   insertIntoManagedObjectContext:context] autorelease];

我注意到它不太容易出现随机Core Data错误,并且更容易调试。它实际上与您的代码做同样的事情,但是首先显式获取实体描述,因此您可以根据需要单独调试它。

答案 1 :(得分:1)

似乎您的对象模型中没有名为“Something”的NSManageObject ...您是否在对象模型中创建了实体?我不确定你是否也需要生成代码,但是你可以让xcode自动为你做这个,点击实体,说新的,然后从那里的菜单中选择Managed Object

答案 2 :(得分:0)

发现我的问题,NSManagedObjectContext由于某种原因没有正确初始化。我已经按照操作方法重新编写了代码,现在它似乎正常工作。

非常感谢:)