为什么我的initWithNibName方法返回一个nil视图?

时间:2014-12-07 13:11:24

标签: ios objective-c uinavigationcontroller xib presentviewcontroller

我在尝试呈现新的视图控制器时调用此方法。注释掉的线条是我试过的其他事情没有成功。

-(void)presentMailBoxViewController{
    TPMailBoxViewController* mailBoxViewController=[[TPMailBoxViewController alloc]initWithNibName:@"TPMailBoxViewController" bundle:nil];
    [self.navigationController pushViewController:mailBoxViewController animated:YES];
    //[self.navigationController presentViewController:mailBoxViewController animated:YES completion:NULL];
    //[self presentViewController:mailBoxViewController animated:YES completion:NULL];
}

我已将文件所有者设置为相应的视图控制器。

enter image description here

我甚至将xib的视图对象链接到我的视图控制器中作为属性。

enter image description here

但是,当我打破[self.navigationController pushViewController:mailBoxViewController animated:YES];

视图控制器的view属性为nil。是什么给了什么?

3 个答案:

答案 0 :(得分:1)

UIViewController”已经有“view”属性,因此您不需要“myView”。

打开您的故事板或XIB文件,并确保您希望与您一起显示的“view”在故事板或XIB文件中连接到TPMailBoxViewController对象。

在“initWithNibName”之后,视图控制器对象存在,但其“view”属性可能为零,因为尚未加载视图。

当您推送视图控制器时,就是当您的“TPMailBoxViewController”将调用“viewWillLoad”和“viewWillAppear”方法时加载视图后,“view”插座将从nil更改为真实。

答案 1 :(得分:0)

一个项目干净,我的presentMailBoxViewController中的这一行更改修复了我的问题。仍然想知道为什么。谢谢大家!

-(void)presentMailBoxViewController{
    TPMailBoxViewController* mailBoxViewController=[[TPMailBoxViewController alloc]initWithNibName:@"TPMailBoxViewController" bundle:nil];
    [self presentViewController:mailBoxViewController animated:YES completion:NULL];
}

答案 2 :(得分:0)

在AppDelegate中,您需要将窗口的根对象设置为导航控制器。你可以这样做: -

YourViewController *rootObj = [[LoginViewController alloc] init];
 UINavigationController *navObj = [[UINavigationController alloc] initWithRootViewController:rootObj];

[self.window setRootViewController:navObj];

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

在此之后,尝试按下viewcontroller,它应该工作