2009-06-11 199 views
6

在我以編程方式啓動的其中一個視圖中,我看到5個不同的呼叫'loadView/viewdidLoad',但我不明白爲什麼會有這麼多人被調用。有人能向我解釋這背後的機制嗎?多次調用viewDidLoad/loadView

我啓動視圖在父UIViewController(一個TabBar + NavigationBar應用程序的一部分)例如以如下方式進行:

MainEditController *editController = [[MainEditController alloc] initWithNibName:@"MainEditView" bundle:nil];   
[self.navigationController pushViewController:editController animated:YES];   
[editController release]; 

我然後登錄MainEditController'sviewDidLoadloadView方法(以及調用它們各自的超級方法) 。

在 'MainEditView' 筆尖包含3項: -File的擁有者(MainEditController類型的), - 第一 搶答(UIResponder類型的) -View(UIView類型的)

視圖出口連接到文件的所有者和視圖中沒有任何元素。我打算做的是在主視圖中添加多個子視圖,並根據特定條件顯示其中一個子視圖。

我認爲viewDidLoadloadView會在控制器中調用盡可能多的視圖(在這種情況下爲1),但這似乎不是一個有效的假設。

+0

有沒有可能發佈您的MainEditController loadView函數? – marcc 2009-06-11 19:36:00

回答

14

是你的loadView方法調用[super loadView]?如果沒有,視圖屬性可能沒有正確設置,所以下一個time .view被訪問,它會嘗試再次加載它。

刺在黑暗中,但沒有loadView方法,很難縮小可能存在的問題。

+6

loadView狀態的文檔:此方法的自定義實現不應調用超級。 – 2010-01-14 14:34:37

6

我不確定這是否是您所看到的,但如果應用程序接收到低內存警告,導航控制器將釋放當前不可見的視圖以重新獲得內存。當視圖再次可見時,重新創建視圖,該視圖調用loadView。

0

將視圖控制器的視圖屬性設置爲有效視圖。

1

我通過刪除-(void)loadView方法來解決同樣的問題。如果您創建不帶nib文件的UIViewController,則此方法將自動添加到代碼中。