iOS: executeFetchRequest: ошибка: запрос на выборку должен содержать объект - PullRequest
1 голос
/ 25 сентября 2011

Я разработал приложение, предназначенное для 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];

Ошибка возникает, когда я выполняю выборку, чтобы показать в табличном представлении, что сохранило БД.

Я также определил managedObjectModel:

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

Ответы [ 3 ]

7 голосов
/ 25 сентября 2011

Когда вы загружаете модель управляемого объекта, что вы указываете в качестве имени файла модели? (что-то .mom).

Симулятор не чувствителен к регистру, устройство равно . т.е.

если файл называется MyModel.mom, то

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

работает на симуляторе, но не на устройстве.

1 голос
/ 25 сентября 2011

Вы уверены, что правильно написали имя сущности? Вы уверены, что модель управляемого объекта контекста управляемого объекта имеет объект с таким именем? Любая из этих вещей может заставить +entityForName:inManagedObjectContext: вернуть nil, что почти наверняка является вашей проблемой.

0 голосов
/ 29 февраля 2016

Вы также можете использовать метод установки из CoraData ... Просто сделайте что-то вроде этого ...

На вашем CustomCoreDataManager.m

#import "ObjectiveRecord.h" 

call init method like this

-(instancetype)init {

self = [super init];

if (self) {

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

return self; }

Надеюсь, это кому-нибудь поможет ...

...