我遇到了问题:每次点击UIBarButtonItem
时我正在处理的应用都会崩溃。
我正在我的主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模拟器中运行代码。
答案 0 :(得分:1)
的变化:
UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(showSettings:)];
- (void) showSettings:(UIBarButtonItem *)sender
{
}
答案 1 :(得分:0)
正如关于选择器的ref doc所述:
如果对象收到消息以执行不在其中的方法 保留曲目,错误结果。这与调用a一样是一种错误 不存在的功能。但是因为消息发生在运行时,所以 在程序执行之前,错误通常不明显。
因此,请确保您的方法在viewcontroller的范围内。我将首先检查你没有任何拼写错误。如果您的方法不采用任何参数,请不要使用:
并确保您已在类描述中声明了您的方法。
答案 2 :(得分: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
}
希望这有助于你