質問

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:NULL];

rButton.action = @selector(refreshAction);
self.navigationItem.rightBarButtonItem = rButton;
[rButton release];

上記のコードは、ボタンを作成し、ナビゲーションバーに追加し正常に動作しますが、私はボタンをクリックしたときにEXC_BAD_ACCESSでアプリがクラッシュします。私がコメントアウトした場合rButton.action = @selector(refreshAction)。ボタンをクリックすると、何もしませんが、それはどちらかクラッシュしません。

- (void)refreshAction {
    NSLog(@"refreshAction");
}

このコードはNavigationViewController viewDidLoadメソッドからnavigationControllerスタックにプッシュされTableViewControllerのviewDidLoadメソッドである。

私は無駄に、この作業を取得しようとし、おそらく3時間を費やしてきます。

役に立ちましたか?

解決

通常のメモリ管理などが犯人でした。 navigationControllerからtableViewControllerを読み込みます:

NearbyTableViewController *tableController = [[[NearbyTableViewController alloc] initWithNibName:@"NearbyTableViewController" bundle:nil] autorelease];
self.nearbyTableController = tableController;   

[self pushViewController:self.nearbyTableController animated:YES];
[tableController release];

自動解放するために設定されたオブジェクトを解放する...メモリ管理における最も一般的なエラーでなければなりません。 その行を削除する[tableControllerリリース]

問題を解決しました

他のヒント

あなたはすなわち、ボタンを作成するときに@selector(refreshAction)を指定した場合、任意の運:ます。

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)];
あなたも初期化子にアクションを指定しない場合は、

たぶん、ターゲットは保存されません。

私はあなたのコードが動作しない理由を正確に100%わからないんだけど、コンストラクタで直接セレクタを設定する作業を行います:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh   
                         target:self 
                         action:@selector(refreshAction)];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top