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:错误: