insertNewObjectForEntityForName: inManagedObjectContext: возвращение ошибки NSNumber? - PullRequest
9 голосов
/ 29 апреля 2010

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

insertNewObjectForEntityForName:inManagedObjectContext:

внезапно возвращает какой-то странный экземпляр NSNumber. GDB говорит, что возвращенный объект имеет правильный пользовательский подкласс NSManagedObject, но когда я иду напечатать описание самого NSManagedObject, я получаю следующую ошибку:

*** -[NSCFNumber objectID]: unrecognized selector sent to instance 0x3f26f50

Что еще более странно, я могу установить некоторые отношения и атрибуты, используя setValue: forKey: и все хорошо. Но когда я пытаюсь установить одно конкретное отношение, я получаю эту ошибку:

*** -[NSCFNumber entity]: unrecognized selector sent to instance 0x3f26f50

Я перепробовал все: от очистки всех целей до перезапуска Mac и iPhone, даже отредактировав модель так, чтобы рассматриваемые отношения были к одному, а не ко многим. Независимо от того, что я делаю, возникает та же проблема. Кто-нибудь видел что-нибудь подобное раньше?

Ответы [ 4 ]

14 голосов
/ 23 ноября 2012

У меня была та же проблема: я добавил метод isDatabase (возвращающий BOOL) к родительскому объекту моего объекта Database, который имел отношение под названием «database». Переименование isDatabase в isOfTypeDatabase решило проблему. Так что продолжайте искать в родительских объектах!

2 голосов
/ 05 января 2013

Я определил свойство для подкласса NSManagedObject, которое вступало в конфликт с именем отношения, определенного в классе.

Вот код в моем MyManagedObjectSubclass+Custom.h

@property (readonly, nonatomic) BOOL isSeason;

Вот код, созданный XCode для MyManagedObjectSubclass.h

@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;

Обратите внимание, что isSeason по KVC будет совпадать с названием сезона

1 голос
/ 09 ноября 2011

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

Я полагаю, что проблема связана с поврежденным атрибутом / отношением, и NSCFNumber фактически ищет objectID для этого атрибута / отношения. В моем случае я мог использовать valueForKey: чтобы найти все атрибуты / отношения, хотя отношение, которое я назвал «файлом», казалось поврежденным.

В конце концов я понял, что расширил NSObject для включения логического метода «isFile», и это каким-то образом мешало CoreData и приводило к тому, что он либо возвращал поврежденный объект, либо не мог должным образом иметь дело с имеющимся у него объектом. Я предполагаю, что CoreData должен динамически создавать методы "isXXX".

Я мог бы решить проблему, удалив метод isFile, или переименовав мое свойство.

0 голосов
/ 27 января 2011

Селектор идентификатора объекта и объекта находится на NSManagedObject, а не NSCFNumber (или NSNumber). Я не ожидаю, что вы вызовете любой из этих селекторов на NSNumber, который должен быть свойством объекта, а не самим объектом.

Каждая сущность в CoreData должна расширяться NSManagedObject, поэтому ваш NSCFNumber объект не является сущностью.

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