UIViewController initWithNibName导致nil视图

时间:2012-05-27 00:31:10

标签: iphone ios uiview uiviewcontroller nib

我试图制作一个始终加载相同笔尖的视图控制器。我的初始化代码如下所示:

-(id)init
{
    NSString* nibName;

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        nibName = @"XIB_iPad";
    else
        nibName = @"XIB_iPhone";

    self = [super initWithNibName:nibName bundle:nil];
    if (self)
    {
        ...
    }
    return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    return [self init];
}

问题是此代码导致视图控制器具有零视图。我在这里做错了吗?有更好的方法吗?

感谢。

4 个答案:

答案 0 :(得分:7)

检查以下内容:

  1. 您的项目中存在XIB_iPad.xib和XIB_iPhone.xib。
  2. 每个xib文件的“文件所有者”都是正确的类(YourViewController)。
  3. 每个文件所有者视图插座(在xib文件中)都已正确链接 观点。
  4. 如果在检查这三个步骤后仍然遇到问题,请提供用于实例化和设置自定义视图控制器的代码。

答案 1 :(得分:5)

我遇到了同样的问题。

我检查了所有选项,因为选择的答案说并没有为我解决问题。

我的问题是视图的自动布局已启用(但我不知道为什么,因为此功能,视图始终为零;如果有人知道,请发表评论)。

要禁用自动布局,请转到“文件检查器”并取消选中“使用Autolayout”选项(参见图)。

希望帮助别人。

enter image description here

答案 2 :(得分:3)

有一点需要注意的是,如果您为nil传递nibName,根据文档,请按此顺序进行搜索(强调添加):

  

如果视图控制器类名称以“Controller”结尾,则为   在MyViewController中,它查找名称与之匹配的nib文件   没有单词“Controller”的类名,如 MyView.nib

     

它查找名称与视图名称匹配的nib文件   控制器类。例如,如果类名是MyViewController,   它会查找 MyViewController.nib 文件。

我有一个普通的香草视图,其基本相同的名称​​没有“Controller”的末尾加上后缀。它正在加载它而不是预期的笔尖。

答案 3 :(得分:1)

您的代码对我来说很合适。是否可能以不同的方式命名您的XIB文件(设备上的情况很重要),以及它们是否是正确目标的成员?