我在xib文件中设置了我的用户界面,并使一切运行良好。但是xib文件非常混乱,所以我决定尝试创建一些按钮/条/等。以编程方式。我可以让它们显示出来,但是我对选择器做错了。
例如,在xib文件上使用instructions
按钮,我只是使用鼠标将instructions
按钮与.h文件中的giveInstructions
方法连接起来,一切都是精细。但是当我以编程方式尝试时,就像这样:
UIBarButtonItem *instr = [[UIBarButtonItem alloc] initWithTitle:@"Instructions"
style:UIBarButtonSystemItemDone target:nil action:@selector(giveInstructions:)];
我收到unrecognized selector sent to instance
错误。我做错了什么?
答案 0 :(得分:2)
您的target
不应该是nil
,而应该是应该接收操作的实例。在你的情况下,这可能是self
,所以试试这个:
UIBarButtonItem *instr = [[UIBarButtonItem alloc] initWithTitle:@"Instructions" style:UIBarButtonSystemItemDone target:self action:@selector(giveInstructions:)];
答案 1 :(得分:2)
看到你修复了目标问题,很可能“giveInstructions”不存在,至少在这个类的实现中不存在。
如果您已宣布
- (void)giveInstructions:(id)sender;
在.h中,必须在.m文件中使用匹配的实现,例如:
- (void)giveInstructions:(id)sender{
//my code here
}
如果你已经这样做了,那么我能想到的唯一另一件事可能是错误的是,在你的@selector(giveInstructions:)
中,如果你没有发件人或任何其他论据,冒号可能是不必要的从方法中传出。
注意:如果您调用的方法与实际声明的名称不同,则调用@selector
时会出现此错误,因为选择器不存在。
答案 2 :(得分:2)
选择器的命名很重要。
如果它有一个冒号,则它引用一个带有一个参数的方法
@selector(myMethod:)
- (void)myMethod:(id)sender;
如果它没有冒号,那么该方法不会期望参数
@selector(myMethod)
- (void)myMethod;
注意虽然它们看起来都有相同的名称,但它们实际上是两种不同的方法。
答案 3 :(得分:1)
UIBarButtonItem *instr =
[[UIBarButtonItem alloc] initWithTitle:@"Instructions"
style:UIBarButtonSystemItemDone target:self action:@selector(giveInstructions:)];
<-- change "nil" to "self" !
我认为目标:nil
应为self
,因为这些函数属于此类文件。