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

Posted

技术标签:

【中文标题】iOS:executeFetchRequest:错误:获取请求必须有一个实体【英文标题】:iOS: executeFetchRequest:error: A fetch request must have an entity 【发布时间】:2011-09-25 02:27:04 【问题描述】:

我开发了一个针对 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 中显示存储了 DB 的内容时,会发生错误。

我还定义了一个 managedObjectModel:

- (NSManagedObjectModel *)managedObjectModel
 
if (__managedObjectModel != nil)

    return __managedObjectModel;

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"newsStandModel" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
return __managedObjectModel;

【问题讨论】:

【参考方案1】:

当您加载托管对象模型时,您指定什么作为模型文件名? (.mom)。

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

如果文件被称为MyModel.mom 那么

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

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

【讨论】:

嗨@deamWombourne,我刚刚在定义 managedObejectModel 的地方添加了一个代码,并仔细检查了该名称的拼写是否正确。对此有什么新想法吗?谢谢你的帮助:) 如果你输入NSLog(@"url : %@", modelURL);,你会得到什么 - 你得到了正确的模型 URL 还是得到了 nil?【参考方案2】:

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

【讨论】:

【参考方案3】:

你也可以使用 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; 

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

【讨论】:

以上是关于iOS:executeFetchRequest:错误:获取请求必须有一个实体的主要内容,如果未能解决你的问题,请参考以下文章

for循环随机挂在executeFetchRequest:错误:

当模型放置在静态库中时,executeFetchRequest 返回类型发生了变化

核心数据 fetchRequest 给出 executeFetchRequest:error: <null> is not a valid NSFetchRequest

NSInvalidArgumentException',原因:'executeFetchRequest:错误:

Swift 中的 executeFetchRequest 致命错误

executeFetchRequest 不适用于 propertiesToFetch