我开发了针对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;
}
答案 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; }
希望这对某人有帮助......