iPhone“;“基于视图的应用程序”;模板:如何加载视图控制器xib?

iPhone“;“基于视图的应用程序”;模板:如何加载视图控制器xib?,iphone,cocoa-touch,uiviewcontroller,Iphone,Cocoa Touch,Uiviewcontroller,我对可可豆有点生疏了,有个简单的问题。当我在XCode 4中创建一个“基于视图的应用程序”时,我得到一个主窗口xib、一个应用程序委托和一个UIViewController子类和xib。主窗口xib包含UIViewController子类作为对象。但我在代码或检查器中的任何地方都没有看到在这个UIViewController上调用“init”。这个视图控制器是如何初始化的?我猜嵌入对象的“init()”只是神奇地被调用了?self.window.rootViewController=self.v

我对可可豆有点生疏了,有个简单的问题。当我在XCode 4中创建一个“基于视图的应用程序”时,我得到一个主窗口xib、一个应用程序委托和一个UIViewController子类和xib。主窗口xib包含UIViewController子类作为对象。但我在代码或检查器中的任何地方都没有看到在这个UIViewController上调用“init”。这个视图控制器是如何初始化的?我猜嵌入对象的“init()”只是神奇地被调用了?

self.window.rootViewController=self.viewController

它们通过MainWindow.xib文件连接

如果要在从xib/nib加载viewcontroller时自定义内容,则需要覆盖viewcontroller中的方法
-(id)initWithCoder:(NSCoder*)inCoder

例如:

- (id)initWithCoder:(NSCoder *)theCoder {

    self = [super initWithCoder:theCoder];

    if(self) {

        // your fancy stuff here!
    }

    return self;
}

请看一看,我提供了一个描述nib加载过程的答案。

我是问它是如何加载的,而不是如何连接的。请看我答案中的第一行?viewcontroller被定义为
窗口的
rootViewController
。当您调用
[self.window makekeyindvisible]时将加载
rootViewController
(self.viewController)。“将加载”的确切含义是什么?
-(id)initWithCoder:(NSCoder*)inCoder。确定。很抱歉问了这么多愚蠢的问题,我只是很难重新思考可可的问题。当我将对象(如视图控制器)冻干到XIB中时,如何在冻干到XIB中之前“创建”该对象?如果我想使用与“init()”不同的“init”消息初始化对象,比如“initSpecial(X X)”?哦,UIViewController awakeFromNib是否加载视图控制器的nib?viewController位于MainWindow.nib中,它实际上是由plist中的一个条目加载的。我知道viewController对象来自何处。它是如何加载viewController XIB的?所有这些都连接在MainWindow.XIB中。查看文件的所有者委托,它引用了第一响应者下面的XXXAppDelegate。appDelegate将其viewController设置为xib中的视图控制器。选择视图控制器并打开inspector,它引用另一个nib文件.hrm ok。所以它是“NIB名称”属性。我想我只是有点困惑,用传统的“先做x,然后做y”的方式来思考问题,而不是用声明式/预先构建的XIB观点。因此,如果我想用相同的视图控制器加载不同的NIB,我可以只更改“NIB名称”属性值。谢谢