2011-11-23 47 views
1

我正在開發一個項目,我正在嘗試以編程方式做最多的事情。UIBarButtonItem讓我的iPhone應用程序崩潰

我必須將UIBarButtonItem添加到在App Delegate中創建的NavigationController的導航欄中。

WPViewController *mainVC = [[WPViewController alloc] initWithNibName:@"WPViewController_iPhone" bundle:nil]; 
UINavigationController *navCon = [[UINavigationController alloc] init];   
[navCon pushViewController:mainVC animated:NO]; 
[self.window addSubview:navCon.view];  

然後在此時此地實現文件中聲明WPViewController我創建並添加barbuttonitem作爲VC的導航項目:

UIBarButtonItem *rBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(test)]; 
self.navigationItem.rightBarButtonItem = rBarButtonItem; 

還有就是在此之前宣佈了一個名爲測試方法簡單登錄「測試」,但當我點擊按鈕的應用程序崩潰。

請幫助我,這個錯誤讓我瘋狂。

注:

  • 我使用ARC在我的項目
  • 從未有過類似的bug之前
+0

Crash log please。 – CodaFi

+0

我剛剛收到exc_bad_access消息 – Francesco

+1

將環境變量NSZombieEnabled設置爲YES並進行調試。 – 0x8badf00d

回答

0

在ARC「發送到釋放實例消息」指的編譯器標記,併發布你的信息之前,您的項目可能會被髮送。

在調試器中設置NSZombieEnabled,MallocStackLogging和guard malloc。然後,當你的應用程序崩潰,在控制檯輸入:

崩潰對象的

(GDB)信息的malloc歷史//地址即0x543216 //

+0

'[object release]'在啓用ARC時無效。即使你嘗試使用'@selector(release)',它也會拋出一個編譯時錯誤。 –

+0

那麼他需要關閉ARC,因爲編譯器認爲他已經完成了該對象。 – CodaFi

-1

的按鈕試圖將自身作爲參數傳遞給測試方法。我猜你的方法簽名不包含參數,因爲你的選擇器中沒有冒號(應該是@selector(test:))。和方法的實現應該是這樣的:

- (void) test:(id)sender 
+0

我已經試過你在說什麼,問題仍然存在。 – Francesco

+0

如果您讀取OP的註釋部分中的輸出,您會注意到它不是無效的選擇器,而是一個釋放的實例。 –

+0

對,當我發佈這個答案時,輸出的評論並不存在。對不起 –

0

使用addSubview但創建一個屬性時,我也有這個問題,用(nonatomic, strong)強大的解決了我的問題。