Подтвердить что ты не робот

Не удалось найти NSManagedObjectModel для имени объекта

Это код для метода toggleAddProject, код Core Data почти такой же, как в примере Apple CoreDataBooks, однако, когда я нажимаю кнопку добавления, приложение вылетает с entityForName: could not locate an NSManagedObjectModel for entity name 'Project' в строке, начинающейся с newProjectController.project

-(IBAction)toggleAddProject 
{
    NewProjectViewController *newProjectController = [[[NewProjectViewController alloc] initWithStyle:UITableViewStyleGrouped] autorelease];

    // Create a new managed object context for the new project -- set its persistent store coordinator to the same as that from the fetched results controller context.
    NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init];
    self.addingManagedObjectContext = addingContext;
    [addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]];
    newProjectController.project = (Project *)[NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:addingContext];
    [addingContext release];


    UINavigationController *addNewNavigationController = [[UINavigationController alloc] initWithRootViewController:newProjectController];
    [self.navigationController presentModalViewController:addNewNavigationController animated:YES];  
    [addNewNavigationController release];
}

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

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(CoreDataBooksAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
}

При изменении для моего делегата приложения это не имеет значения. Спасибо за любую помощь.

4b9b3361

Ответ 1

Эта ошибка имеет только несколько возможных источников:

  • Типо в имени Entity.
  • Объект контекстного объекта объекта Nil.
  • Невозможность добавить модель, содержащую объект, в постоянное хранилище, которое использует контекст.
  • Невозможность добавить правильный постоянный магазин в контекст.

Ответ 2

У меня была эта проблема, когда у меня было несколько разных NSManagedObjectContext s. Быстрый способ его отладки состоял в том, чтобы проверить различные биты соединения и убедиться, что мой объект был указан перед вызовом контекста.

NSLog(@"Context: %@",context);
NSLog(@"PS Coord : %@",context.persistentStoreCoordinator);
NSLog(@"MOM : %@", context.persistentStoreCoordinator.managedObjectModel);
NSLog(@"Entities : %@",[[context.persistentStoreCoordinator.managedObjectModel entities] valueForKey:@"name"]); 

Ответ 3

Используйте отладчик и убедитесь, что ваша модель не нуль. Это самая распространенная причина этой ошибки. Если это не nil, тогда найдите опечатку в имени сущности.

Ответ 4

Документы Apple дают хорошую информацию об отладке ошибки entityForName: could not locate an NSManagedObjectModel for entity name 'Foo'.

Посмотрите этот раздел в Руководстве по программированию основных данных.

Ответ 5

Хорошо, я столкнулся с этой проблемой, и я решил ее таким образом. Исходный код был указан как:

Event *event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext];

В то время как код является кратким, похоже, что отладчик не может отображать более подробную информацию о том, где ошибка, так как вы создаете и настраиваете новый экземпляр объекта "Событие" (или как бы то ни было, имя вашего Сущности).

Вместо этого я разбил это на три строки, и отладчик отобразил намного больше информации:

Event *event = [[NSManagedObject alloc] init];
NSManagedObjectContext *moc = [self managedObjectContext];
event = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:moc];

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

Ответ 6

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

Удалите приложение каждый раз, когда вы меняете модель данных!

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

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

Ответ 7

TechZen - это место... в моем случае это было №4. Пройдите шаги в следующей ссылке, и это должно помочь вам добавить соответствующие методы CoreData в существующий проект и настроить все правильно, чтобы вы не столкнулись с имеющейся ошибкой.

Добавление основных данных в существующие проекты iPhone