由于未捕获的异常'NSInvalidArgumentException而终止应用程序

时间:2010-02-17 21:03:57

标签: iphone objective-c

好的,这是一个有趣的...我收到了 警告:Characters may not respond to 'addHeroType:atX:atY:fromMobTable'

虽然我可以看到正确定义的功能,但另一双眼睛呢?

以下是Characters.h

中的定义
-(void) addHeroType:(int)newMobType atX:(int)x atY:(int)y fromMobTable:(Mobdefs*)newMobTable;

以下是Characters.m

中的功能
-(void) addHeroType:(int)newMobType atX:(int)x atY:(int)y fromMobTable:(Mobdefs*)newMobTable

这是我在另一个类调用中调用的一个调用heroFactory(Characters.h包含在heroFactory中):

[Characters addHeroType:1 atX:location.x atY:location.y fromMobTable:newMobTable];

但是这行导致应用程序因未捕获的异常而终止 - 检查调试器我看到“NSObject无法识别选择器”

我确信这个问题很明显,为什么我看到一个警告,即如果它与定义匹配,那么Character类可能不会响应函数调用。

任何帮助非常感谢。

1 个答案:

答案 0 :(得分:4)

-(void) addHeroType:(int)newMobType atX:(int)x atY:(int)y fromMobTable:(Mobdefs*) newMobTable

将其声明为实例方法。

[Characters addHeroType:1 atX:location.x atY:location.y fromMobTable:newMobTable];

但是你在类中称它为类方法。

所以要么将方法声明为类方法

+(void) addHeroType:(int)newMobType atX:(int)x atY:(int)y fromMobTable:(Mobdefs*) newMobTable

或者在实例上调用

Characters *instance = [[[Characters alloc] init] autorelease];
[instance addHeroType:1 atX:location.x atY:location.y fromMobTable:newMobTable];

当然,这取决于您的方法所需的范围。