【问题标题】:Puzzled with nib files对 nib 文件感到困惑
【发布时间】: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 文件的文章和文档,但仍然令人困惑。

【问题讨论】:

    标签: iphone cocoa-touch uikit interface-builder 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
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2019-09-13
      • 2012-07-22
      • 2013-05-13
      • 2020-04-16
      • 2023-03-08
      相关资源
      最近更新 更多