在iOS应用程序的构建设置中,Main Interface选项的作用是什么?

4
当我启动一个单视图应用程序时,尝试使用“主界面”选项将一个xib文件分配为我的主要界面文件,而不是从AppDelelgate以编程方式分配rootViewController时,当我运行它时,程序会收到一个SIGABRT信号。 这是为什么?“主界面”选项的目的是什么?

你能展示一下控制台上报告的关于中止的更多细节吗? - Chris Trahey
它没有显示任何东西。只是向程序发送了 SIGABRT 信号。 - Rakesh
2个回答

4
我发现了如何做到这点。一旦我了解了整个应用程序加载过程,这就变得非常明显了。所以我想回答自己的问题。
关键是要从xib本身初始化窗口并设置UIApplication及其委托。
步骤1:创建一个带有UIWindow对象的xib。将文件所有者的xib设置为UIApplication。
步骤2:在xib中创建一个AppDelegate对象,并连接文件所有者的delegate出口到此对象。
步骤3:在AppDelegate类中为窗口创建出口。
步骤4:在构建设置中选择MainInterface选项作为您创建的xib。
步骤5:注释掉applicationDidFinishLaunchingWithOptions:方法中的代码。
如果运行程序,则会在模拟器中显示窗口,但会收到警告,应用程序应该在应用程序启动时具有rootViewController。
步骤6:因此,在applicationDidFinishLaunchingWithOptions:内部,我们可以实例化UIViewController并将窗口出口的rootViewController分配为此视图控制器。

1

您可以将.xib文件注册为主界面,但我认为这时会默认File's Owner是一个UIApplication对象。这是一种在早期版本的Xcode中常见的应用程序结构方式。如果您发现包含MainWindow.xib文件的项目,则很可能使用该样式。


我尝试将文件的所有者分配为UIApplication后运行应用程序。但仍然面临同样的问题。在applicationDidFinsishLoading:中注释掉自动生成的代码后,错误不再显示,但是在控制台上会显示预期的“需要根视图控制器”消息。 - Rakesh
你是否有任何与文件所有者相关联的内容,在UIApplication对象中没有匹配属性? - Phillip Mills
没有任何东西连着。创建了一个新项目后,我所做的唯一更改就是填写了主界面选项并将applicationDidFinishLoading:中的代码注释掉了。 - Rakesh
现在将文件的所有者更改为UIApplication。就这样。 - Rakesh
如果您没有使用设计为主界面的.xib文件,那么最好的选择是不要这样做!(当我回答您的原始问题时,我假设您正在使用旧式xib。) - Phillip Mills
嗯,我只是在尝试不同的东西。 :) 你能告诉我如何将一个xib设计成主界面吗? - Rakesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接