如何将 MainWindow.xib 连接到空项目

Posted

技术标签:

【中文标题】如何将 MainWindow.xib 连接到空项目【英文标题】:How to hookup a MainWindow.xib to an empty project 【发布时间】:2011-09-10 00:46:21 【问题描述】:

从 XCode 4.2 开始,当您使用 XCode 4.2 创建一个空项目时,不再为您创建和连接 MainWindow.xib。我找到了一篇描述如何执行此操作的文章,并且我已经完成了它并且它有效,但是如果这个过程教会了我什么,它表明我不知道 main()、AppDelegate 和 MainWindow 是如何实现的。 xib 并存。

http://www.trappers.tk/site/2011/06/16/mainwindow-xib/

为什么 MainWindow.xib 类更新为 UIApplication? 为什么在xib上放一个对象,然后该类选择AppDelegate类? 为什么 File Owner 的代理出口连接了 AppDelegate 对象? 为什么AppDelegate的窗口出口是窗口? 为什么 - (BOOL) application:didFinishLaunchingWithOptions: 需要注释掉。

我已经研究过了,但我仍然不能 100% 确定应用程序启动后如何加载所有内容,以及为什么只需要设置一个 MainWindow。我有一种感觉,我可能应该了解所有这些概念,以便继续在 ios 开发中取得进步。

【问题讨论】:

【参考方案1】: 为什么 MainWindow.xib 类更新为 UIApplication?

在最低级别,nib 文件使用方法 -[UINib instantiateWithOwner:options:] 加载。 nib 文件中的文件所有者是占位符。在 Xcode 中,它还不是一个特定的对象。加载 nib 文件时,它将解析为实际对象。它的目的是通过出口和动作将笔尖内的对象与加载笔尖的对象联系起来。作为 UINib 方法的“instantiateWithOwner:”参数传递的对象是 Interface Builder 中的 File's Owner 占位符将解析为的对象。

UIApplication 加载在 info.plist 中指定的 nib 文件,并在加载 nib 文件时为 owner 参数传递 'self'。

通过设置类名,您只是在暗示工具,以便它们可以建议您允许建立的一组操作和出口。

为什么在xib上放了一个对象,然后该类选择了AppDelegate类?

当您将通用对象放入 xib 并将其类更改为“AppDelegate”时,您是在告诉 Xcode 在文件加载时实例化“AppDelegate”的实例。

为什么 File Owner 的代理出口连接了 AppDelegate 对象?

UIApplication 有一个“委托”,它将责任委托给并在有趣的事件发生时通知。建立此连接时,您将应用程序的委托属性设置为您在上面指定的实例。从那时起,此实例将接收来自 UIApplication 的委托消息,例如 -application:didFinishLaunchingWithOptions:。

为什么AppDelegate的窗口出口是Window?

Outlets 是一种在 xib 中引用对象的方法。它们导致属性或实例变量被设置为引用出口指向的对象。当你制作这个插座时,你正在制作它,以便你在上面创建的应用程序委托实例可以引用在加载 xib 时也创建的窗口。

为什么 - (BOOL) application:didFinishLaunchingWithOptions: 需要注释掉。

它代表了以代码为中心的方式来执行在 xib 中发生的一些相同事情,如果它们都存在,它们将相互覆盖。

【讨论】:

好东西!只是一些快速的澄清。由于 AppDelegate 主要用于委派从 UIApplication 接收“事件”的责任,这是否意味着应用程序将只有一个 AppDelegate 类?另外,MainWindow.xib 是实例化 AppDelegate 和任何其他对象(例如控制器类)的“东西”吗? 是的,应用程序只有一个应用程序委托类。 UIApplication 是一个单例,'delegate' 属性只包含一个对象。 “另外,MainWindow.xib 是实例化 AppDelegate 和任何其他对象(例如控制器类)的“东西”吗?”这是一种方法,这就是它在这个项目中所做的,但还有其他方法。例如将委托类名称传递给 UIApplicationMain() 并在 application:didFinishLaunchingWithOptions: 中实例化其余对象。【参考方案2】:

放置在 XIB 文件上的对象是 AppDelegate,因为它代表 Interface Builder 中的所有连接,这意味着如果您编写一个方法,当单击按钮时它会显示文本,该方法将连接到 App Delegate 或文件的所有者,最好是委托人。文件的所有者,因为它是 UIApplication,连接到委托,因为它将特定对象分配为 App Delegate。抱歉,我无法回答您的其余问题,它们没有真正的意义。

希望对你有帮助

【讨论】:

是的,大多数问题都基于我提供的链接,其中包含“连接”MainWindow.xib 的分步说明,但令人讨厌的是,它并没有解释为什么或如何如果你独自一人,就明白这一点。 我知道,一开始对我来说很难,但需要一些练习才能真正了解发生了什么。祝你好运!

以上是关于如何将 MainWindow.xib 连接到空项目的主要内容,如果未能解决你的问题,请参考以下文章

如何将应用程序委托添加回 mainwindow.xib

新 Xcode 项目中的 MainWindow.xib 在哪里?

Xcode 4.2 模板更改 - UIApplication & MainWindow.xib

如何将故事板连接到代码

我真的需要 MainWindow.xib 文件吗?

在 Mac OSX 中连接插座 - 混乱