0

問題があります: をタップするたびに、作業中のアプリがクラッシュ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 は ebable であり、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 に答える