按UIButton会导致无法识别的选择器错误
我的UIView
中有一个按钮,它是这样创建的:
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(toggleEdit)]; self.navigationItem.rightBarButtonItem = editButton; [editButton release];
这是动作方法:
-(void) toggleEdit:(id)sender { }
但是我得到了这个错误
2011-09-02 15:27:13.362 blubb [15006:207] – [DatabaseSelectionViewController toggleEdit]:无法识别的选择器发送到实例0x5a29d80 2011-09-02 15:27:13.365 blubb [15006:207] *终止应用程序由于未被捕获exception’NSInvalidArgumentException’,原因:’ – [DatabaseSelectionViewController toggleEdit]:无法识别的选择器发送到实例0x5a29d80′
为什么会这样?
更改
@selector(toggleEdit)
至
@selector(toggleEdit:)
选择器的正确名称是
@selector(toggleEdit:)
没有:它会寻找具有此签名的方法:
-(void) toggleEdit // No parameters { }
当你真正宣布:
-(void) toggleEdit:(id)sender { }
对于其他任何绊倒这个的人来说,当你不再拥有某些东西并且该语句指向内存中的某个垃圾地址时,你也可以收到那些“无法识别的选择器发送到实例0x …”错误。
应该:
-(IBAction) toggleEdit:(id)sender {}
和
@selector(toggleEdit:)
尝试:
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(toggleEdit) forControlEvents:UIControlEventTouchUpInside];
您尝试使用的方法接受一个参数,这意味着它的名称中有一个冒号 – 冒号实际上是名称的一部分 。 获得选择器时需要包含该冒号:
@selector(toggleEdit:)
请参阅Objective-C编程语言的消息语法部分:
选择器名称包括名称的所有部分,包括冒号,因此前面示例中的选择器名为
setOriginX:y:
. 它有两个冒号,因为它需要两个参数。 但是,选择器名称不包含任何其他内容,例如返回类型或参数类型。
如果您正在使用故事板。 有时它有助于从故事板中删除按钮,并添加一个新按钮,并进行必要的连接。
- 在iOS 6中以编程方式获取通话logging
- 错误域= NSURLErrorDomain代码= -1017“操作不能
- 从iPad的Airplay – 一个单独的UIView显示在Apple TV上
- 用CGImageDestinationFinalize创build一个大的GIF – 内存不足
- 以编程方式closuresGoogle AdMob广告(iOS)
- 如果应用程序已经运行,如何处理推送通知?
- iOS,UIImagePickerController有没有一种方法来检测用户点击拍照button,而不实现自定义控件?
- 变异的方法发送给不可变的对象
- iOS:从NSString(一个htmlstring)剥离<img …>