nibNameOrNil到底意味着什么?

时间:2012-02-20 21:55:44

标签: iphone ios cocoa-touch

XCode生成的视图控制器上的默认init方法签名是:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ }

我看到这些初始化时提供了两个值,只是nib名称(bundle为nil),或者只是nil两者。一切似乎都有效。

UIViewController如何真正处理self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];?为这两个值传递nil是否有缺点?

2 个答案:

答案 0 :(得分:9)

如果您将nil作为nibName传递,则该方法将查找与视图控制器具有相同文件名的nib。

例如,如果您有一个名为MyViewController的视图控制器,它将查找MyViewController.xib nib文件。

如果找不到笔尖,则需要覆盖loadView方法来创建并将UIView分配给控制器的视图插座。

- (void)loadView
{
    UIView *theView = [[UIView alloc] ...
    // Setup the main view
    self.view = theView;
}

答案 1 :(得分:1)

来自docs

nibName:

  

如果为nibName参数指定nil并且未覆盖loadView方法,则视图控制器将使用其他方法搜索nib文件。请参阅nibName。

nibBundle:

  

要在其中搜索nib文件的包。此方法首先在bundle的特定于语言的项目目录中查找nib文件,然后是Resources目录。如果为nil,则此方法在主包中查找nib文件。