0

我遇到了一个问题:每次UIBarButtonItem点击 an 时,我正在开发的应用程序都会崩溃。

我在主 ViewController 的 viewDidLoad 方法中创建按钮:

UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(showSettings)];
self.navigationItem.leftBarButtonItem = settingsButton;

showSettings方法只包含一个 NSLog():

- (void)showSettings {
    NSLog(@"ciao");
}

该按钮在导航栏中正确显示,但只要点击该按钮,应用程序就会崩溃并显示一条exc_bad_access消息。

我究竟做错了什么?

编辑: ARC 已启用,我正在 iOS 5.1 模拟器中运行代码。

4

3 回答 3

1

变化:

UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(showSettings:)]; 

- (void) showSettings:(UIBarButtonItem *)sender
{
}
于 2012-08-23T13:16:48.690 回答
0

正如关于选择器的参考文档所述:

如果一个对象接收到一条消息来执行一个不在其库中的方法,则会导致错误。这与调用不存在的函数是同一种错误。但是因为消息传递发生在运行时,所以错误通常在程序执行之前并不明显。

因此,请确保您的方法在视图控制器的范围内。我将首先检查您是否有任何错字。如果您的方法不带任何参数,请不要使用:并确保您已在类描述中声明了您的方法。

于 2012-08-23T13:52:37.373 回答
0

以编程方式创建 uibarbutton。此示例用于自定义 uibarbutton

UIButton *timebutton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 90, 40) ];
[timebutton setTitle:timeString forState:UIControlStateNormal];
[timebutton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];


UIBarButtonItem *rightBarButtonItem1 = [[UIBarButtonItem alloc]  
                                      initWithCustomView:timebutton];
[rightBarButtonItem1 setTintColor:[UIColor blackColor]];

//set the action for button
rightBarButtonItem1.action =  @selector(navigationMethod:);


self.navigationItem.rightBarButtonItem = rightBarButtonItem1;


//Method declaration
-(IBAction)navigationMethod:(id)sender{
 // action
}

希望这可以帮助你

于 2014-10-28T12:19:21.773 回答