动态按钮问题:无法识别的选择器发送到实例 [英] Dynamic Button Problem: unrecognized selector sent to instance

查看:31
本文介绍了动态按钮问题:无法识别的选择器发送到实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在 iPhone 应用程序上动态创建按钮.

I am dynamically creating buttons on iPhone app.

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[btn setTitle:atitle forState:UIControlStateNormal];

[btn addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside]; // handle touch

[buttons addObject:btn];


----------

-(void) buttonTouched:sender{
}

----------

-[NSCFString buttonTouched:]: unrecognized selector sent to instance 0x592ef70
2010-07-28 08:59:43.551 DataManager[1707:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString buttonTouched:]: unrecognized selector sent to instance 0x592ef70'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x02398919 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x024e65de objc_exception_throw + 47
    2   CoreFoundation                      0x0239a42b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x0230a116 ___forwarding___ + 966
    4   CoreFoundation                      0x02309cd2 _CF_forwarding_prep_0 + 50
    5   UIKit                               0x002bce14 -[UIApplication sendAction:to:from:forEvent:] + 119
    6   UIKit                               0x003466c8 -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x00348b4a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    8   UIKit                               0x003476f7 -[UIControl touchesEnded:withEvent:] + 458
    9   UIKit                               0x00534070 _UIGestureRecognizerUpdateObserver + 3687
    10  CoreFoundation                      0x02379d1b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
    11  CoreFoundation                      0x0230e987 __CFRunLoopDoObservers + 295
    12  CoreFoundation                      0x022d7c17 __CFRunLoopRun + 1575
    13  CoreFoundation                      0x022d7280 CFRunLoopRunSpecific + 208
    14  CoreFoundation                      0x022d71a1 CFRunLoopRunInMode + 97
    15  GraphicsServices                    0x02bfd2c8 GSEventRunModal + 217
    16  GraphicsServices                    0x02bfd38d GSEventRun + 115
    17  UIKit                               0x002cab58 UIApplicationMain + 1160
    18  DataManager                         0x00001c4c main + 102
    19  DataManager                         0x00001bdd start + 53
)
terminate called after throwing an instance of 'NSException'
Program received signal:  "SIGABRT".

有什么想法吗?

推荐答案

因为您在 addTarget 的选择器参数中包含了一个冒号 (:),接收选择器必须接受一个参数.运行时无法识别选择器 @selector(buttonTouched:),因为没有接受参数的具有该名称的方法.更改方法签名以接受 id 类型的参数以解决此问题.

Because you included a colon (:) in your selector argument to addTarget, the receiving selector must accept a parameter. The runtime doesn't recognize the selector @selector(buttonTouched:), because there isn't a method with that name that accepts a parameter. Change the method signature to accept a parameter of type id to resolve this issue.

这篇关于动态按钮问题:无法识别的选择器发送到实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆