2
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 = @セレクタ(refreshAction)をコメントアウトした場合。ボタンをクリックしても何も起こりませんが、クラッシュすることはありません。UIBarButtonItemがiPhoneアプリがクラッシュボタンが

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

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

私はこれを動作させるためにおそらく3時間を費やしましたが、無駄です。あなたも初期化子にアクションを指定しない場合

答えて

1

を。 navigationControllerからtableViewControllerのロード:

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

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

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

0

どれ運ボタンを作成するときに、すなわちを@selector(refreshAction)を指定した場合:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)]; 

は多分ターゲットは保存されません。

0

私は正確にあなたのコードが動作しない理由を100%わからないんだけど、コンストラクタで直接セレクタを設定する作業を行います。通常のメモリ管理が犯人だったよう

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
         target:self 
         action:@selector(refreshAction)]; 
+0

悪いメモリ管理が判明しましたが、あなたの提案に感謝します。 –

関連する問題