ボタンがクリックされたときにUIBarButtonItemはiPhoneアプリがクラッシュ
-
21-08-2019 - |
質問
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)];
所属していません StackOverflow