Не удалось найти NSManagedObjectModel для объекта - PullRequest
2 голосов
/ 18 мая 2011

Это код для fetchRequest в viewDidLoad, и этот код взят из учебника, найденного здесь , только для того, чтобы программно связать контроллер навигации и табличное представление вместо использования конструктора интерфейса. Сущность ProductInfo существует. Однако, когда я запускаю программу, я получаю сообщение об ошибке:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'ProductInfo''

Я сбросил симулятор, если это была старая модель, но ошибка все еще возникает. Я также переключился на использование FetchedResultsController, но проблема все еще сохраняется. Это проблема, потому что эти методы fetchedResultsController не находятся внутри appdelegate? В настоящее время они находятся в TableViewController. Как я могу решить эту проблему?

Метод viewDidLoad:

- (void)viewDidLoad{

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription * entity = [NSEntityDescription entityForName:@"ProductInfo" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError * error;
self.productInfos = [_context executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
[super viewDidLoad];}

ProductInfo.h:

@class ProductDetails;

@interface ProductInfo : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * productName;
@property (nonatomic, retain) NSString * productPrice;
@property (nonatomic, retain) ProductDetails * details;

@end

FetchedResultsController

-(NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
    return _fetchedResultsController;
}

NSFetchRequest  * fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription * entity  = [NSEntityDescription entityForName:@"ProductInfo" inManagedObjectContext:_context]; //line that is causing the problem
[fetchRequest setEntity:entity];

NSSortDescriptor * sort = [[NSSortDescriptor alloc] initWithKey:@"productInfos.productName" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

[fetchRequest setFetchBatchSize:20];

NSFetchedResultsController * theFetchedResultsController  = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext: _context sectionNameKeyPath:nil cacheName:@"Root"]; 
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = nil;

[sort release];
[fetchRequest release];
[theFetchedResultsController release];

return _fetchedResultsController;

}

Любая помощь высоко ценится. Спасибо заранее.

В случае, если вышеупомянутые фрагменты, которые я вставил, не помогли, я также прикрепил весь проект с моделью данных внутри.

http://www.mediafire.com/?5cns4q0sv9hqn6s

Ответы [ 2 ]

5 голосов
/ 16 апреля 2012

Это происходит со мной каждый раз, когда переключаются компьютеры разработки. Что я должен сделать, это

  1. Удалить приложение с симулятора.
  2. Переименуйте файл базы данных, в котором хранится UIManagedDocument.
  3. Выполнить чистку сборки.
  4. Сборка и запуск приложения.
3 голосов
/ 18 мая 2011

Столкнувшись с этой проблемой ранее, похоже, что это может быть простое написание имени сущности в файле xcdatamodeld.Строка «ProductInfo» должна точно соответствовать имени объекта в файле модели.

Возможно, ваш контекст не делает правильную ссылку.Подумайте о том, чтобы показать еще немного вашего кода, связанного с контекстом, если вышеприведенное не решает проблему.

...