簡體   English   中英

單擊按鈕時,UIBarButtonItem使iPhone應用程序崩潰

[英]UIBarButtonItem crashes iphone app when button is clicked

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");
}

這段代碼位於TableViewController的viewDidLoad方法中,該方法從NavigationViewController viewDidLoad方法推入navigationController堆棧。

我花了大約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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM