UIBarButtonItem操作因无法识别的选择器而失败

时间:2013-05-07 09:16:38

标签: objective-c xcode uibarbuttonitem unrecognized-selector

我已经搜索了很多但是找不到我的问题的解决方案。我有一个函数,当我点击其中一个UIBarButtonItem时,我想调用它作为选择器。我的UIViewController嵌入在导航控制器中。

在.h文件中

- (IBAction)EventsAction:(UIBarButtonItem *)sender;

在我的.m文件中,我在viewDidLoad方法中创建了我的UIBarButtonItems

UIBarButtonItem *composer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(EventActions:)];
composer.tag = 0;

UIBarButtonItem *notifList = [[UIBarButtonItem alloc] initWithTitle:@"!N!" style:UIBarButtonItemStyleBordered target:self action:@selector(EventActions:)];
notifList.tag = 1;

NSArray *buttonArr = [[NSArray alloc] initWithObjects:composer, notifList, nil];
self.navigationItem.rightBarButtonItems = buttonArr;

该功能定义为:

- (IBAction)EventsAction:(UIBarButtonItem *)sender {

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"connection"]) {
    if (sender.tag == 0) {
        [self performSegueWithIdentifier:@"newEvent" sender:self];
    }
    if (sender.tag == 1) {
        [self performSegueWithIdentifier:@"notificationView" sender:self];
    }
}

else {
    UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"NoConnectionTitle", nil) message:NSLocalizedString(@"NoConnection", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"Tamam", nil) otherButtonTitles:nil];
    [myAlert show];
}

}

然而,当我运行此代码并点击其中一个按钮时,我收到无法识别的选择器错误

  

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [BIAllEventsController EventActions:]:无法识别的选择器发送到实例0x1ddc1400'

我也尝试将IBAction更改为void,但也没有解决我的问题。

修改

谢谢大家,抱歉这个愚蠢的错误。虽然它教授非常重要的课程,例如:

  • 永远不要相信自动完成
  • 晚安睡不会解决所有问题

2 个答案:

答案 0 :(得分:1)

您的代码中有拼写错误,您的方法名称为EventsAction s ,但在此行中

UIBarButtonItem *composer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(EventActions:)];

您使用EventActions时没有 s 。您必须更改UIBarButtonItem s。

初始化的方法声明

答案 1 :(得分:0)

因为您的方法名称为EventsAction,但您要将EventActions(s错位)添加为barButton的选择器。