[英]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.