Xcode 如何决定首先加载哪个 xib?我该如何改变呢?

Posted

技术标签:

【中文标题】Xcode 如何决定首先加载哪个 xib?我该如何改变呢?【英文标题】:How does Xcode decide which xib to load first? How can I change that? 【发布时间】:2011-11-21 23:15:11 【问题描述】:

我下载了一个包含三个 xib(A.xib、B.xib 和 C.xib)的 Xcode 项目。我注意到:

它们都不叫“MainWindow.xib”。 在项目摘要中,Main Interface 值设置为 MainWindow 主 nib 文件基本名称未设置 Main.c 也没有指定应用委托 int retVal = UIApplicationMain(argc, argv, nil, nil);

不过,当我构建和运行时,应用程序会加载 A.xib。 应用如何决定加载什么?

我使用的是 Xcode 4,我的目标是 ios 5。 谢谢。

【问题讨论】:

【参考方案1】:

您可以在应用目标的“摘要”选项卡中设置Main Interface

看这张图片:

编辑:或者,正如 Alan 所写,您可以在 info.plist 文件中进行设置。

编辑 2:哦。我明白你的问题是什么。您可以使用 MainWindow 作为您的主要 .xib 文件,但您必须编辑在 MainWindow 中加载的 .xib。打开 MainWindow.xib,然后选择使用的视图控制器。如果我是对的,它的类设置为A。如果要使用B.xib,则必须将类更改为B。您还必须在属性检查器中设置用于视图控制器的 NIB。

为 MainWindow.xib 中使用的 UIViewController 设置类:

设置笔尖:

【讨论】:

谢谢。我已经尝试过了,但我遇到了崩溃。 *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x6c90160> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.' *** First throw call stack: (0x1df5052 0x1c15d0a 0x1df4f11 0x364032 0x2d5f7b 0x2d5eeb 0x2f0d60 0x83291a 0x1df6e1a 0x1d60821 0x83146e 0x833010 0x61314a 0x613461 0x6127c0 0x621743 0x6221f8 0x615aa9 0x20a3fa9 0x1dc91c5 0x1d2e022 0x1d2c90a 0x1d2bdb4 0x1d2bccb 0x6122a7 0x613a9b 0x1dcd 0x1d45) terminate called throwing an exception。你知道为什么吗? 您设置的 xib 没有 UIWindow(或没有将插座链接到其中的 UIWindow)。每个应用程序的主 xib 中都必须有一个链接的 UIWindow。 我在 xib 中添加了一个 UIWindow,在 AppDelegate.h 中添加了一个 IBOutlet,并在 IB 中连接了东西……但我仍然得到这个 -[UIApplication _preferredInterfaceOrientationGivenCurrentOrientation:]: unrecognized selector sent to instance 0x6c59770 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIApplication _preferredInterfaceOrientationGivenCurrentOrientation:]: unrecognized selector sent to instance 0x6c59770' *** First throw call stack:... terminate called throwing an exception 谢谢。我已经按照编辑#2 中的建议进行了尝试,但我得到“应用程序在应用程序启动结束时应该有一个根视图控制器”。显然 didFinishLaunchingWithOptions 从未被调用,但我不完全确定为什么。 记得更改应用委托中使用的类。但是你能给出你下载的项目的链接吗?自己进行项目测试会容易得多。【参考方案2】:

在应用程序的 Info.plist 中。

【讨论】:

您的意思是“主 nib 文件基本名称”条目吗? 嗯,它与 matsr 向您展示的设置相同,因此只需在此处更改即可。但是请阅读我在下面写的评论。 好的,谢谢。还有一个问题:如果没有设置这个值怎么办? Xcode 是否会查找属于 `NSObject ` 的子类的类? 嗯,每个应用都需要有一个 App 委托和一个 UIWindow。项目 -> 应用程序委托之间的链接是通过根 xib,而应用程序委托 -> UI 窗口之间的链接也是通过根 xib。从头开始创建一个新项目并打开它的 MainWindow.xib。您会注意到 xib 中有一个“Appname App Delegate”对象;确保您的自定义 xib 复制相同的结构。

以上是关于Xcode 如何决定首先加载哪个 xib?我该如何改变呢?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode - 如何检测 iPhone 的屏幕尺寸 [关闭]

xCode 8.3 的 xib 中的布局被破坏

如何导航回以前加载的 xib 文件?

如何将 xib 文件加载为自定义类?

如何在swift中按下按钮从另一个xib文件加载另一个xib文件

GWT - 如何获取值并决定加载哪个页面