"NSInternalInconsistencyException", причина: "Foo" не является подклассом NSManagedObject

Хорошо, так что это ошибка, которую я получаю

   *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '"Place" is not a subclass of NSManagedObject.'

Я предполагаю, что это означает, что "Место" не добавлено как сущность к базовой модели данных??? Но это показано на рисунке ниже.

Я предполагаю, что мое предположение неверно, хотя любая помощь или идеи были бы хорошими.

Я уверен, что это строка, вызывающая его:

  NSManagedObject* place = [NSEntityDescription
                               insertNewObjectForEntityForName:@"Place" 
                               inManagedObjectContext:context];

Ответ 1

Если вы не используете пользовательские классы (no Place. [hm]), как вам кажется, вы не уверены, проверьте вкладку Entity и убедитесь, что Класс имя пусто (= NSManagedObject) - не Место.

Ответ 2

У меня была такая же проблема с классами, называемыми Message and Connection. Ошибка появилась после добавления средства электронной почты с использованием библиотеки MessageUI. Я считаю, что конфликт возникает из-за того, что библиотека будет иметь классы с именем Message и Connection, поэтому они не рассматриваются как подклассы NSManagedObject. Изменение имен с помощью префикса (в моем случае с помощью X) делает сущности уникальными. Я намерен в будущем префикс всех моих объектов, чтобы вероятность возникновения конфликта была меньше.

Ответ 3

Первое, что нужно сделать, когда вы сталкиваетесь с такими ошибками, - проверить имя класса вашего объекта:

  • Открыть XCDataModel
  • Выберите свой объект
  • Откройте правую панель Утилиты
  • Нажмите кнопку "показать инспектор модели данных".
  • Проверьте имя класса, чтобы он синхронизировался с вашей сгенерированной моделью

Надеюсь, это поможет!

Ответ 4

Другим способом решения этой проблемы является использование подкласса NSManagedObject (рекомендуется).

Place *place = [NSEntityDescription
                           insertNewObjectForEntityForName:@"Place" 
                           inManagedObjectContext:context];