如何从xib实例化UIViewController子类?

问题描述:

我有一个UIViewController与界面生成器中的UIView。我不能为我的生活得到正确的实例化。如何从xib实例化UIViewController子类?

我使用:

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

任何帮助吗?提前致谢。

+0

myViewController是否升起nil?你有什么错误吗? –

从你提供的行中看来,实例化是正确完成的。你不忘记把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

它不应该像你拥有它的方式一样,你忘记了一步;尝试:

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];