对 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 文件感到困惑的主要内容,如果未能解决你的问题,请参考以下文章