所以我用类方法创建了一个CommonMethods类:
+ (CCMenu *)createMenu:(NSString *)menuName atPosition:(CGPoint)position {
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:self selector:@selector(choose:)];
CCMenu *menuBlockMenu = [CCMenu menuWithItems:menuBlock, nil];
menuBlockMenu.position = position;
return menuBlockMenu;
}
现在在我的MainClass中包含了choose:方法,我创建了一个菜单:
CCMenu *regularBlockMenu = [CommonMethods createMenu:kbRegularBlock atPosition:position];
[self addChild:regularBlockMenu];
当我点击菜单时我的程序崩溃,因为它不理解选择器调用。我该如何实现?我想创建一个CommonMethods方法,因为我会在很多类中反复使用这个方法。
感谢您的帮助。
答案 0 :(得分:1)
由于类方法中的self
引用了该类,因此您不应将self
作为选择器的目标:
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:self selector:@selector(choose:)];
// HERE ------^^^^
相反,您应该将选择器发送到响应选择器choose:
答案 1 :(得分:1)
你想在MainClass类中选择一个方法吗?如果是这样,你需要稍微修改你的createMenu函数。试试这个,
+ (CCMenu *)createMenu:(NSString *)menuName atPosition:(CGPoint)position forTarget:(id)target
{
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:target selector:@selector(choose:)];
CCMenu *menuBlockMenu = [CCMenu menuWithItems:menuBlock, nil];
menuBlockMenu.position = position;
return menuBlockMenu;
}
然后在MainClass中:
CCMenu *regularBlockMenu = [CommonMethods createMenu:kbRegularBlock atPosition:position forTarget:self];
[self addChild:regularBlockMenu];
您需要在MainClass中定义-(void)choose:(id)sender;
所以这样做是设置选择目标:成为MainClass的实例,而不是CommonMethods。
答案 2 :(得分:0)
你需要让CommonMethods成为单身人士
@implementation CommonMethods
static CommonMethods* globalCommonMethods = nil;
+(CommonMethods*)gCommonMethods
{
if( !globalCommonMethods ) globalCommonMethods = [[CommonMethods alloc] init];
return globalCommonMethods;
}
-(CCMenu *)createMenu:(NSString *)menuName atPosition:(CGPoint)position {
CCMenuItemImage *menuBlock = [CCMenuItemImage itemWithNormalImage:menuName selectedImage:menuName target:self selector:@selector(choose:)];
CCMenu *menuBlockMenu = [CCMenu menuWithItems:menuBlock, nil];
menuBlockMenu.position = position;
return menuBlockMenu;
}
-(void)choose:(id)sender
{
//do stuff
}
现在当你需要访问CommonMethods时使用[CommonMethods gCommonMethods]