为什么有时会调用initWithNibName?

时间:2012-11-12 03:00:23

标签: objective-c uiviewcontroller

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

一切正常。上面的代码是由编译器编写的标准。没什么奇怪的。我在viewControllers中放置了断点,只是为了看看情况如何。

有时会调用该函数。有时它不是。 “ 在所有情况下,事情都很好。但是那个函数没有被调用的情况会怎样?

是的,我正在为所有那些viewControllers使用XIB。

我注意到,直接在navigationViewController下的viewControllers是initWithNibName不会中断的那个。我想知道为什么。

1 个答案:

答案 0 :(得分:3)

当您的NSViewController在xib文件中定义(通常作为IBOutlet)时,不调用initWithNibName:bundle:而是调用initWithCoder:。当您使用Interface Builder将NSViewController设置为UITabBarController(用于UIViewController)或UINavigationController的一部分时,就是这种情况,并且几乎总是在使用Storyboard时。

或者你也可以试试这个:

myViewController *objMyViewController = [[MyViewController alloc] initWithNibName:@"WebViewController_iPhone" bundle:nil];
objMyViewController.managedObjectContext = self.managedObjectContext;
navController = [[UINavigationController alloc] initWithRootViewController:objMyViewController];
[self.window setRootViewController:navController];
[window makeKeyAndVisible];