【问题标题】:viewController nib's view is nil?viewController nib 的视图为零?
【发布时间】:2012-08-08 13:56:32
【问题描述】:

我过去只以编程方式创建 viewController/views。

使用 xib 比我想象的要难。

我发现 xib 或任何其他子视图的 self.view 最初是 nil。

I created the viewController by [[MyViewController alloc] init]  
and tried to [myViewController.imageView setImage: image];  //imageView is nil  

NSLog(@"%p", myViewController.view); // access view here
[myViewController.imageView setImage: image]; //works now 

我觉得我错过了一些非常基本的东西。会是什么?

【问题讨论】:

  • 您是尝试在 init 方法中还是在 viewDidLoad 触发后访问视图?
  • 当使用链接到 xib 的附加视图控制器时,您必须确保您喜欢控制器的 xibs 视图出口。你这样做了吗?
  • ---OFF 你写道:使用 xib 比我想象的要难。你在开玩笑吧,不是吗?
  • 不是在开玩笑..你能看看'banded'的答案下面的cmets吗?

标签: iphone ios view xib


【解决方案1】:

the documentation for UIViewController 中所述,当您第一次访问view 属性时,视图会延迟加载。最早可以参考它们的是viewDidLoad

【讨论】:

    【解决方案2】:

    根据我的经验,当我尝试在 viewDidLoad 触发之前访问视图时会发生这种情况,例如尝试在视图控制器的 init 方法中访问它。如果是这种情况,请等到 viewDidLoad 触发后才能访问视图。

    【讨论】:

    • 感谢您的快速回答,然后我可以使用上面的技巧吗?或者我可以将图像传递给 init。如果我定义-(id) initWithImage:(UIImage*)image,它不会再使用xib文件了吗?
    • 你可以使用 -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil image:(UIImage *)image 并调用 super -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 如果您仍想使用笔尖,请在该方法中使用。在这种情况下,您需要保留图像并在 viewDidLoad 触发后对其进行设置。
    • 其实 -(id)initWithImage:(UIImage*)image { [super init]; ..} 工作得很好.. 是不是一个惊喜?
    • 这有点令人惊讶,您能够在不使用我在上一篇文章中提到的超级构造函数的情况下加载 nib 文件。
    【解决方案3】:

    试试

    [[MyViewController alloc] initWithNibname:@"mynibname" bundle:nil] 
    

    以这种格式分配正确的视图....尝试一下

    【讨论】:

      猜你喜欢
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多