2013-02-22 71 views
2

時,我有下面的代碼:SIGABRT訪問到剛剛創建UIViewController的視圖

- (void)func 
{ 
    MyViewController *ctrl = [MyViewController new]; 
    [ctrl doSmth]; 
    [self presentViewController:ctrl animated:NO]; 
} 

//------------ 

- (void)doSmth 
{ 
    CGRect *rect = self.view.frame; 
    // Do something with rect 
    self.view.frame = rect; 
} 

好吧,我知道,當-[UIViewController view]等於nil那麼它的創建。而且這段代碼在我的更改之前確實有效(只有按鈕和標籤的可見性,沒有什麼特別),現在它在self.view上拋出SIGABRT,看起來它不能創建。突然。如果我恢復我的改變,所有工作都像魔術一樣。即使我不會調用此函數,它會在呈現時崩潰,並在摘要中顯示view = 0x00000000

我只有一個問題:WAT?

+0

顯示您的loadview/viewdidload方法。 – iDev 2013-02-22 18:25:31

+0

ctrl的視圖在您調用doSmth時尚未加載。直到它的viewDidLoad被調用,它才被加載。 – rdelmar 2013-02-22 18:27:08

回答

0

我發現了這個錯誤。

經過XCode的「重構」(重命名一些IBOutlets)舊插座已標記爲!符號但未刪除,XCode沒有告訴我這件事。

我的意思是!-s,是Interface Builder顯示無效圖標的插座。無效的出口意味着您在視圖和不存在的屬性/實例變量之間有連接。所以當NIB在運行時加載時,應用程序將會崩潰,因爲沒有這樣的屬性/實例變量。

!-mark in IB

所以,如果你在這樣的錯誤運行,您應該卸下出口,或以相同的名稱類已鏈接的XIB來(通常是文件的所有者)添加屬性/實例變量。

+0

你能擴展一下你的答案來描述'!'-s是什麼,你如何找到它們以及你如何擺脫它們?謝謝! – Olie 2015-06-15 19:47:27

相關問題