对 nib 文件感到困惑

Posted

技术标签:

【中文标题】对 nib 文件感到困惑【英文标题】:Puzzled with nib files 【发布时间】:2010-06-10 10:14:00 【问题描述】:

我知道 nib 文件是序列化的对象,并且它们有所有者、出口来建立连接。 我使用 XCode 导航窗口模板创建了应用程序,该应用程序按其顺序创建了 2 个 nib 文件 - MainWindow 和 SecondView。我无法理解 MainWindow 是如何指代 SecondView,据我所知,这两者之间没有任何联系。 SecondView 的所有者是 UIViewController,在 MainWindow 中有一个导航选项卡,它也是 UIViewController。但是它们在 IB 中是如何连接的我无法理解...

我也不明白是谁 实例化 MainWindow 的所有者 对象以及该对象所在的位置 保留,变量在哪里 UIApplication myApp = [[UIApplication alloc] init].

这个是自我回答的:UIApplicationMain 并且要拥有实例变量,我需要在某处创建出口。

如果我用 UIViewController 所有者创建 10 个 nib 文件,谁会触发它们的反序列化?

如果某个类是 nib 文件的所有者,那么该类的基本职责是什么?是否将 nib 文件反序列化到内存中?

抱歉,没有组织的问题,我已经阅读了许多关于 nib 文件的文章和文档,但仍然令人困惑。

【问题讨论】:

【参考方案1】:

在您的应用启动时加载 MainWindow.xib。

打开 MainWindow.xib。确保您在列表视图中。您应该会看到 UINavigationController 的实例。在里面你应该看到一个 UIViewController 的实例。选择 View Controller 实例并查看 Inspector Panel。您应该看到它有一个设置为“RootViewController”的属性“Nib Name”。因此,viewController 将在运行时查找并加载“RootViewController” nib。

因此,如果您创建 10 个 nib,则您需要负责反序列化,但 Interface Builder 可以通过将视图打包到单独的 nib 文件中来帮助您保持 nib 的小且易于管理。

【讨论】:

【参考方案2】:

我不确定我是否正确理解了您的所有问题。但是在加载应用程序时会加载 MainWindown(主窗口)笔尖。您可以从项目的 info.plist 中验证这一点。您将在那里找到主要 nib 文件的名称。由于在加载应用程序时会加载主 nib,因此对象的所有者就是您的应用程序实例。

【讨论】:

抱歉混淆,我知道它是在应用程序启动期间加载的,但是哪个类/部分代码触发加载它? main 中唯一可能加载它的代码是 UIApplicationMain 函数,那么在该函数内部是否有代码在读取 info.plist 然后反序列化该 nib 文件? OK 这部分在重新阅读 Apple 的文档后对我来说很清楚。在UIApplicationMain 中加载主笔尖。但是,我无法得到问题第一部分的答案 - SecondView 我们如何链接到 MainWindow

以上是关于对 nib 文件感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

对java属性文件位置感到困惑

对标准输入、标准输出和标准错误感到困惑?

对 NSBundle 的行为感到困惑

对 robocopy 的工作方式感到困惑

对签署 android APK 感到困惑?

对启动模式感到困惑