我在Objective-C iOS类中有一个名为StickerClass的UIButton。该类有一个名为'theView'的UIButton的公共实例。在StickerClass的构造函数中,我使用以下命令设置初始属性,例如框架,图层属性和子视图,以及点击时的目标:
[theView addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside];
有一个名为TopViewController的顶级类,它创建一个StickerClass实例,然后使用对变量theView(StickerClass实例中的UIButton)的公共访问,将按钮添加到TopViewController(使用{{1 }})。
回到StickerClass,我有这个方法:
[self.view addSubview:[myInstance theView]]
在标题中,我在@end之前有签名:
- (void)aMethod:(UIButton*)button {
NSLog(@"Do some stuff...");
}
但是当我单击该按钮时,由于无法识别选择器而引发SIGABRT错误。错误是:
- (void)aMethod:(UIButton*)button;
有人知道为什么会这样吗?我想知道我是否错误地设置了目标,即因为它是自己试图在TopViewController中调用一个名为aMethod而不是StickerClass的方法(并通过将方法和它的签名添加到具有类似NSLog的TopViewController来测试它 - 仍然犯同样的错误)。任何想法都非常感激。
谢谢!
答案 0 :(得分:1)
错误似乎源于在构造函数中使用addTarget:action:forControlEvents:
。如何创建一个单独的方法来将目标添加到StickerClass实例
-(void)addButtonTarget {
[self.theView addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside];
}
并在创建StickerClass实例后立即在TopViewController中调用此方法。