Ошибка метода управляемого объекта "нераспознанный селектор отправлен на экземпляр" - PullRequest
0 голосов
/ 24 августа 2011

В процессе самообучения цели C и iOS SDK.Я дошел до того, что мне кажется, что я понимаю, что я делаю, но я нахожусь на контрольно-пропускном пункте, который я не вижу в прошлом.Я создал базовую модель данных с несколькими сущностями, причем одна главная сущность имеет пару отношений один к одному с парой других сущностей.И я могу нормально работать с основным объектом, а также с любым объектом, который находится в отношениях один к одному с основным объектом.Однако, когда я пытаюсь добавить объект к одному из объектов, основанных на NS Set, используя средства доступа, сгенерированные базовыми данными, я получаю нераспознанную ошибку селектора: Вот некоторый код, чтобы запутать вещи еще больше:

Weapon *tempWeapon = [NSEntityDescription insertNewObjectForEntityForName:@"Weapon" inManagedObjectContext:inputContext];
NSArray *tempWeaponStats = [inputMech getMechWeaponStats:tempEquipName];

tempWeapon.weaponName = tempEquipName;
tempWeapon.weaponDisplayName = tempEquipDisplayName;
tempWeapon.weaponLocation = tempEquipLocation;
tempWeapon.weaponType = tempEquipType;
tempWeapon.weaponCritSize = tempEquipSize;            
tempWeapon.weaponHeat = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:0] intValue]];
tempWeapon.weaponDamage = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:1] intValue]];
tempWeapon.weaponRangeMin = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:2] intValue]];
tempWeapon.weaponRangeShort = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:3] intValue]];
tempWeapon.weaponRangeMed = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:4] intValue]];
tempWeapon.weaponRangeLong = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:5] intValue]];

NSLog(@"Adding to the weapon list %@", tempWeapon.weaponName);
[inputMech insertObject:tempWeapon inWeaponListAtIndex:(NSUInteger)0];

При запуске этого кода я получаю следующую ошибку:

2011-08-24 01:49:52.643 DigitalRecordSheet[12947:f203] -[Mech insertObject:inWeaponListAtIndex:]: unrecognized selector sent to instance 0x718bbe0

Теперь inputMech относится к типу главной сущности, о котором я упоминал ранее.Вот основной селектор сгенерированных данных из Mech.h:

(void)insertObject:(Equipment *)value inEquipmentListAtIndex:(NSUInteger)idx;

Насколько я могу судить, я правильно отправляю сообщение, но оно не работает.По сути, я хочу, чтобы у одного меха был список из нескольких видов оружия.Теперь я не прав, как я это делаю?Я предполагаю, что сначала мне нужно создать новый объект оружия, настроить его так, как я хочу, а затем добавить его в объект WeapHist NSSet меха.Но основные селекторы данных не работают, поэтому я должен предположить, что я делаю что-то не так.Любой совет здесь будет оценен, так как я перебрал несколько книг и руководств, и ни один из них действительно не углубился в процесс обработки этих типов отношений ... Заранее благодарен за любой совет.Приветствия,

J ^ 2

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Эта ошибка не вызвана конфигурацией вашей модели данных.Ошибка:

unrecognized selector sent to instance

… всегда возникает из-за неправильного класса переменной по какой-либо причине.

В этом случае класс Mech в переменной inputMech не имеет метода:

insertObject:inEquipmentListAtIndex:

....

Наиболее вероятной причиной вашей ошибки является то, что в процессе написания всего этого вы создали несколько копий файлов класса Mech.Один настроен для упорядоченных отношений, а другой нет.Вы на самом деле компилируете с тем, что нет.

В вашей второй проблеме вы просто отправляете объект NSSet параметру метода, который ожидает объект Weapon.Вы путаете addWeaponListObject с addWeaponListObjects:

0 голосов
/ 07 июня 2016

выполните следующие шаги: 1) создали новую версию базовой модели данных через XCode.2) Исправьте отношения (добавлены новые отношения между ними. введите описание ссылки здесь ) 3) заново создайте подкласс NSManagedObject

...