【发布时间】:2012-07-01 19:16:28
【问题描述】:
我不敢相信我会在这么简单的事情上磕磕绊绊:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"Tap me" forState:UIControlStateNormal];
[button addTarget:self action:@selector(test) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(50, 50, 120, 60);
[self.view addSubview:button];
}
return self;
}
-(void)test {
NSLog(@"Test");
}
当我按下按钮时它会崩溃,并出现unrecognized selector sent to instance 错误。
有人知道我在这里做错了什么吗?
编辑 - 错误信息:
-[__NSCFString test]: unrecognized selector sent to instance 0x29ee30
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString test]: unrecognized selector sent to instance 0x29ee30'
编辑 - 它的呈现方式 (ARC):
DemoViewController *demoVC = [[DemoViewController alloc] init];
[self.window addSubview:demoVC.view];
[self.window makeKeyAndVisible];
【问题讨论】:
-
能否请您发布确切的错误代码?
-
您是否在 .h 文件中声明了
test? -
是的,它已经在那里声明了,尽管这应该没什么区别。
-
@WendiKidd - 是否声明都没关系。 Obj-C 是一种动态语言,声明只是为了欺骗编译器。如果方法已实现,则运行时确实识别选择器。
-
顺便说一句,您确定您实现了
-test而不是-test:或其他方式吗?
标签: iphone objective-c ios button