【问题标题】:Why is my initWithNibName method returning a nil view?为什么我的 initWithNibName 方法返回一个 nil 视图?
【发布时间】:2015-02-05 05:16:27
【问题描述】:

我在尝试呈现一个新的视图控制器时调用了这个方法。注释掉的行是我尝试过但没有成功的其他事情。

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

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

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

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

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

【问题讨论】:

  • 你用笔尖还是故事板?

标签: ios objective-c uinavigationcontroller xib presentviewcontroller


【解决方案1】:

UIViewController”已经有一个“view”属性,所以你不需要“myView”。

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

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

当你 push 视图控制器时,也就是你的“TPMailBoxViewController”将获得“viewWillLoad”和“viewWillAppear”方法被调用以及视图被加载的时候,“view”出口将从 nil 变为真实的东西。

【讨论】:

  • 我不明白,我不需要 myView 属性...但是您还告诉我将我的 xib 的根视图对象链接到我的视图控制器...不是吗我已经用“myView”做了什么???
  • 我看到你的编辑,在我推送视图控制器后,viewDidAppear 永远不会被调用。
  • "UIViewController" 具有视图控制器拥有的视图的 "view" 属性。确保 UIViewController view 出口连接到您的 XIB 或故事板文件中的视图。
  • 是的,当然,我只链接了我的 xib 的根视图,因为这是我在其他解决方案中读到的,对我来说似乎没有必要,也没有解决我的问题。
  • 这些方法是自动调用的。你的视图出现了吗?
【解决方案2】:

一个干净的项目和我 presentMailBoxViewController 中的这一行更改解决了我的问题。不过还是想知道为什么。谢谢大家!

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

【讨论】:

    【解决方案3】:

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

    YourViewController *rootObj = [[LoginViewController alloc] init];
     UINavigationController *navObj = [[UINavigationController alloc] initWithRootViewController:rootObj];
    
    [self.window setRootViewController:navObj];
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    

    在此之后,尝试推送视图控制器,它应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 2015-05-25
      • 2010-09-25
      • 2015-11-08
      • 1970-01-01
      相关资源
      最近更新 更多