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 = @selector(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發行]解決了這個問題

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

原來壞的內存管理是罪魁禍首,感謝您的建議,但。 – 2009-06-30 14:47:11

相關問題