iOS:executeFetchRequest:错误:获取请求必须具有实体

时间:2011-09-25 02:27:04

标签: ios core-data nsfetchrequest

我开发了针对iPhone的应用程序,它使用了CoreData。当我在模拟器上运行它时,一切正常,但是当我在设备上运行它时,我收到以下错误:

"*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'"

我在代码中指定并定义了一个实体,如下所示:

NSFetchRequest *select = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"NewsStand" inManagedObjectContext:[CDHelper sharedCDHelper].managedObjectContext];
[select setEntity:entity];
NSError *error;
NSMutableArray *results = [[[CDHelper sharedCDHelper].managedObjectContext executeFetchRequest:select error:&error] mutableCopy];

当我执行fetch以在tableView中显示已存储数据库的内容时,会发生错误。

我还定义了一个managedObjectModel:

- (NSManagedObjectModel *)managedObjectModel
 {
if (__managedObjectModel != nil)
{
    return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"newsStandModel" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
return __managedObjectModel;
}

3 个答案:

答案 0 :(得分:7)

加载托管对象模型时,您指定哪个模型文件名? (.mom)。

模拟器不区分大小写,设备。即。

如果文件被调用MyModel.mom那么

NSString *path = [NSBundle mainBundle] pathForResource:@"mymodel" type:@"mom"];
NSURL *url = [NSURL fileURLWithString:string];
myModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];

适用于模拟器,但不适用于设备。

答案 1 :(得分:1)

您确定拼写了正确的实体名称吗?您确定托管对象上下文的托管对象模型是否具有该名称的实体?这些事情中的任何一个都可能导致+entityForName:inManagedObjectContext:返回nil,这几乎肯定是您的问题。

答案 2 :(得分:0)

你也可以使用CoraData中的setter方法...只需做这样的事情......

CustomCoreDataManager.m

#import "ObjectiveRecord.h" 

call init method like this

-(instancetype)init {

self = [super init];

if (self) {

[[CoreDataManager sharedManager] setModelName:@"YourModelName"]; }

return self; }

希望这对某人有帮助......