2012-02-13 2 views
1

Я борюсь с основными данными. Я получаю печально известную ошибку «Не удалось вызвать назначенный инициализатор в классе NSManagedObject». Для новичков, которые читают документацию, начиная с стандартного шаблона в Xcode 4.2, наличие/появление этой ошибки не имеет никакого смысла. Как может произойти сбой при инициализации управляемого объекта? Я никоим образом не изменял свои пользовательские сгенерированные классы из модели. Это означает, что я не переопределял этот инициализатор по умолчанию (initWithEntity: insertIntoManagedObjectContext:) из этих подклассов NSManagedObject. Почему это не будет успешно вызвано?Тестирование базовых основных данных данных?

Вся моя установка очень проста. У меня есть один контекст, один координатор магазина и одна модель. Это было настроено шаблоном. Я визуально изменил модель данных, у меня есть четыре объекта. Затем я сгенерировал четыре класса с динамическими свойствами. Теперь единственное, что я делаю, это передать ссылку на контекст из AppDelegate на мой пользовательский ViewConttroller. В этом пользовательском ViewController я пытаюсь добавить новый объект в контекст Core Data.

Есть ли какая-то методология или набор шагов, с помощью которых я могу проверить, правильно ли инициализирован весь стек данных Core? Существует ли хранилище, хорошо ли контекст?

 NSManagedObjectModel *managedObjectModel = [[managedContext persistentStoreCoordinator] managedObjectModel]; 

    NSEntityDescription *entity = [[managedObjectModel entitiesByName] objectForKey:@"ComplexLocation"]; 
    currentComplexLocation = [[ComplexLocation alloc] initWithEntity:entity insertIntoManagedObjectContext:managedContext]; 
+1

Можете ли вы опубликовать код, который вызывает ошибку, а также ваши созданные классы Core Data? – Tim

+0

Я добавил код, где я пытаюсь добавить объект. –

+0

Легче использовать удобную функцию '[NSEntityDescription insertNewObjectForEntityForName: @" ComplexLocation "inManagedObjectContext: managedContext];' Как было сказано, вы проверяли, чтобы правильные значения были возвращены в managedObjectModel и сущности перед их использованием в initWithEntity? – lnafziger

ответ

2

Это означает, что я не переопределить по умолчанию инициализатору (initWithEntity: insertIntoManagedObjectContext:) этих NSManagedObject подклассов. Почему это не будет успешно вызвано?

Проблемы, что ошибка жалуется на то, что вы не вызова назначенного инициализатор. Если вы подклассифицировали NSManagedObject, вам нужно убедиться, что любые инициализаторы вызывают этот метод. Если вы создаете сам NSManagedObject, вам нужно сделать это, вызвав этот метод.

Обычно простой способ добавить объект в свой контекст - это позвонить +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:].

В этом пользовательском ViewController я пытаюсь добавить новый объект в контекст Core Data.

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

+0

Да, я пытаюсь добавить управляемый объект, конечно ... Мой словарь еще недостаточно точен. Теперь для инициализатора все пользовательские классы, созданные с помощью модели, не имеют явных инициализаторов, это означает, что пользовательский класс ComplexLocation, который является подклассом NSmanagedObject, наследует назначенный инициализатор от его родителя, то есть nsManagedObject. Я называю этот назначенный инициализатор явно, когда я пытаюсь добавить управляемый объект в контекст. Или я чего-то не хватает? : - / –

Смежные вопросы