2011-11-22 94 views
0

我有一個UIViewController與界面生成器中的UIView。我不能爲我的生活得到正確的實例化。如何從xib實例化UIViewController子類?

我使用:

LoginViewController* myViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil] self.window.rootViewController = myViewController;

任何幫助嗎?提前致謝。

+0

myViewController是否升起nil?你有什麼錯誤嗎? –

回答

1

從你提供的行中看來,實例化是正確完成的。你不忘記把myViewController的視圖添加到窗口中嗎?像這樣: [self.window addSubView:myViewController.view]

+0

好吧,我剛剛注意到你把視圖控制器設置爲窗口的'rootViewController',所以視圖不應該成爲這裏的問題。如果文件所有者的'view'屬性連接到主視圖,請檢查您的NIB文件。 –

+0

如果沒有設置筆尖的視圖插座,應用程序應該崩潰,並聲明這樣的錯誤,我不認爲它應該運行而不顯示任何東西。 –

+0

就是這樣。 我在IB中製作了UIViewController,而不是簡單的UIView。 如果我讓LoginViewController類型的文件所有者和視圖插座連接到我的視圖,那麼這個工程: 'LoginViewController * myViewController = [[LoginViewController alloc] initWithNibName:@「LoginViewController」bundle:nil] self.window.rootViewController = myViewController ;'不管我是否在IB中創建UIViewController或UIView。 我的問題是,我什麼時候需要在IB中創建UIViewController,如果它與UIView一起工作? 謝謝! – klyngbaek

1

它不應該像你擁有它的方式一樣,你忘記了一步;嘗試:

LoginViewController* controller = [[[LoginViewController alloc] 
    initWithNibName:@"LoginViewController" bundle:nil] autorelease]; 

self.window.rootViewController = controller; 
[self.window makeKeyAndVisible]; 

它會被自動釋放,這樣你就不必手動釋放,一旦不再需要的對象的引用將被釋放。另外,只要nib名稱與視圖控制器的名稱相同,指定nib名稱就是可選的,在這種情況下它看起來就是這樣。所以,你真的可以這樣做:

LoginViewController* controller = [[[LoginViewController alloc] init] autorelease]; 

self.window.rootViewController = controller; 
[self.window makeKeyAndVisible];