Ошибка CoreData: + entityForName: не удалось найти NSManagedObjectModel для имени объекта - PullRequest
9 голосов
/ 18 августа 2011

Я несколько дней боролся с CoreData, но постоянно получаю эту ошибку:

'NSInternalInconsistencyException', причина: '+ entityForName: не удалось найти NSManagedObjectModel для объектаназвание.

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

метод для сохранения в CoreData:

-(IBAction)save:(id)sender {
    NSManagedObject * newNews = [NSEntityDescription insertNewObjectForEntityForName:@"NewsStand"
    inManagedObjectContext:coredata.managedObjectContext];
    [newNews setValue:news_title forKey:@"story_title"];
    [newNews setValue:news_desc forKey:@"story_desc"];
    [newNews setValue:news_image  forKey:@"story_image"];
    [newNews setValue:test  forKey:@"story_url"];
    [coredata commit];
    NSLog(@"data saved!!!!");
}

Я реализовал все методы основных данных в отдельном классе:

applicationDocumentsDirectory,  
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator, 
- (NSManagedObjectModel *)managedObjectModel, 
- (NSManagedObjectContext *)managedObjectContext

Ответы [ 6 ]

26 голосов
/ 18 августа 2011

Это довольно распространенная ошибка, которая имеет три причины:

  1. Неправильное написание имени объекта, например NewsStand вместо NewsStands.
  2. Наличие нулевого контекста управляемого объекта
  3. Не загружена или не загружена модель управляемого объекта.

(1) является наиболее распространенным, но (3) встречается чаще, чем (2).Вы можете проверить, загружаете ли вы нужную модель с помощью ключевого пути:

aManagedObjectContext.persistentStoreCoordinator.managedObjectModel.entities

, а затем проверьте имена сущностей.

2 голосов
/ 27 августа 2013

Во время разработки я не смог найти сущностей, которые добавил позже. Что сработало для меня:

Удаляйте приложение КАЖДЫЙ РАЗ, когда вы меняете модель данных!

Модель данных кэшируется Core Data между установками, чтобы обеспечить целостность данных. Удалите приложение из симулятора / iPhone, чтобы иметь возможность проверить ваши изменения.

PS: кто-нибудь знает, как это сделать автоматически?

2 голосов
/ 12 марта 2013

У меня была похожая проблема, и ответ TechZen оказался полезным (особенно предложение проверить сущности).Тем не менее, моя проблема оказалась вариантом (2): я мог видеть, что сам moc не равен nil, но я не установил координатор постоянного хранилища.

Я бы добавил это как комментарий к ответу TechZen, но пока не могу, и хочу включить его на случай, если у кого-то еще возникнет моя проблема.

1 голос
/ 18 августа 2011

Убедитесь, что coredata.managedObjectContext не ноль.

0 голосов
/ 09 января 2015

Если вы редактируете фреймворк и запускаете модульное тестирование, чтобы получить ошибку, убедитесь, что ваш файл xcdatamodeld добавлен к цели теста.Фреймворки ведут себя не так, как обычные проекты.

0 голосов
/ 29 марта 2014

У представителя нет комментариев, но в ответе Люка Блума исправлена ​​ MY проблема.Я полностью забыл, что изменил некоторые вещи в модели данных после начальной сборки / установки и провел слишком долго, стуча головой о стол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...