托管对象方法错误“无法识别的选择器发送到实例”

时间:2011-08-24 09:05:39

标签: ios core-data

在教自己的目标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;

据我所知,我正在正确地发送消息,但它不起作用。基本上,我想拥有一个拥有多种武器清单的机甲。现在,我是怎么做错的?我假设我必须首先创建一个新武器对象,按我想要的方式设置它,然后将其添加到Mech的weaponList NSSet对象中。但是核心数据选择器没有工作,所以我不得不假设我做错了。这里的任何建议都会受到赞赏,因为我已经挖掘了多本书籍和指南,并且没有人真正深入了解处理这些类型关系的过程......提前感谢任何建议。欢呼声,

J(1)2

2 个答案:

答案 0 :(得分:1)

此错误不是由数据模型的配置引起的。的:

unrecognized selector sent to instance

...错误总是由于某种原因导致变量中的类错误。

在这种情况下,Mech变量中的类inputMech没有:

insertObject:inEquipmentListAtIndex:

...方法。

导致错误的最可能原因是,在编写所有这些内容的过程中,您创建了Mech类文件的多个副本。一个配置为有序关系,另一个配置不是。你实际上正在编译那个没有的。

在第二个问题中,您只是将NSSet对象发送到需要Weapon对象的方法参数。您将addWeaponListObjectaddWeaponListObjects:

混淆

答案 1 :(得分:0)

采取以下步骤 1)通过Xcode创建了新版本的核心数据模型。 2)修复关系(在两者之间增加了新的关系。enter link description here) 3)重新创建NSManagedObject子类