objective-c - 为什么有时不调用 initWithNibName ?

标签 objective-c uiviewcontroller

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

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

有时会调用该函数。有时并非如此。 ' 在所有情况下,一切都很好。但是什么情况下该函数不会被调用呢?

是的,我正在为所有这些 viewController 使用 XIB。

我注意到直接位于 navigationViewController 下的 viewController 是 initWithNibName 不会中断的 View Controller 。我想知道为什么。

最佳答案

当你的 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];

关于objective-c - 为什么有时不调用 initWithNibName ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337827/

相关文章:

ios - 如何在 iOS 中呈现半透明(半切) View Controller ?

iphone - 使用 UIViewController 子类自定义 iPhone 控件

ios - 如何向 MKMapView 添加宽半径注释?

ios - 将图像处理转换为 64 位会创建黑线

objective-c - NSPreferencePane 中的 NSToolbar

ios - ViewController - (0,0) 处的主视图元素被导航栏遮挡

ios - PresentModalViewController 和 modalTransitionStyle 导致 XIB 中的所有控件变为 "animate in"

ios - 黑色背景屏幕,同时显示弹出 View ,使用单独的 UIViewController

iphone - objective-c:将日期字符串转换为星期几+月份名称

objective-c - CoreData 在 mergeChangesFromContextDidSaveNotification 上崩溃 : invalid Summary