insertNewObjectForEntityForName: inManagedObjectContext: возвращение ошибки NSNumber? - PullRequest
4 голосов
/ 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

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

1 Ответ

1 голос
/ 30 апреля 2010

Я уже сталкивался с ошибкой "нераспознанный селектор, отправленный в экземпляр 0x ...", в ситуации, когда объект, который я ожидаю найти по адресу "указатель" в адресе памяти, был заменен чем-то другим. Возьми эту ситуацию:

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
NSString *someString = [NSString stringWithString:@"some string"]; // autoreleased object returned

[pool drain];
[pool release];

/*
some other code executes
*/

// since the string behind the someString variable has been autoreleased at this point, the memory that someString points to may be occupied by some other data type.  the following may through an EXC_BAD_ACCESS error, or it may try and execute the selector on whatever is occupying that memory space
int stringLength = [someString length];

Этот пример мучительно прост, и моя семантика здесь может быть немного неправильной, но возможно ли, что это то, что происходит в вашем случае более замысловато? Может быть, попробуйте:

[[NSEntityDescription insertNewObjectForEntityForName:@"entityName" inManagedObjectContext:managedObjectContext] retain]

и посмотри что получится?

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