为什么’;iOS 5.0喜欢普通窗口应用程序吗?为什么要求使用视图控制器?

为什么’;iOS 5.0喜欢普通窗口应用程序吗?为什么要求使用视图控制器?,ios,cocoa-touch,Ios,Cocoa Touch,我用Xcode 4.0的“基于窗口的应用程序”模板创建了一个iOS应用程序。当时它运行良好,使用的是iOS 4.3 SDK。这是一个简单的应用程序,将按钮、标签等直接放在窗口上。没有视图控制器,什么都没有 但现在我已经升级到Xcode 4.2(及其iOS 5.0 SDK),并运行该应用程序,当该应用程序在模拟器中启动时,此消息会记录到控制台: “在应用程序启动结束时,应用程序应具有根视图控制器” 可以肯定的是,该应用程序仍在继续工作,但每次发布时都会打印出这个相当麻烦的日志 为什么会这样?为什么

我用Xcode 4.0的“基于窗口的应用程序”模板创建了一个iOS应用程序。当时它运行良好,使用的是iOS 4.3 SDK。这是一个简单的应用程序,将按钮、标签等直接放在窗口上。没有视图控制器,什么都没有

但现在我已经升级到Xcode 4.2(及其iOS 5.0 SDK),并运行该应用程序,当该应用程序在模拟器中启动时,此消息会记录到控制台:

“在应用程序启动结束时,应用程序应具有根视图控制器”

可以肯定的是,该应用程序仍在继续工作,但每次发布时都会打印出这个相当麻烦的日志


为什么会这样?为什么iOS 5.0更喜欢/请求视图控制器?

我不知道为什么会记录此消息,但在iOS的最后几次迭代中,UIWindow和UIViewController之间的集成一直在增加。iOS 4在UIWindow中添加了
rootViewController
属性。这两个类一起工作以管理视图旋转。考虑到iOS 5引入UIViewController的新功能(特别是创建您自己的容器视图控制器的功能),很明显这两个类之间的关系将继续发展。正如您所说,您的应用程序在iOS 5中仍能正常运行,因此拥有根视图控制器还不是一个硬性要求。也许未来的iOS版本中会有一些功能,这些功能将取决于是否有可用的视图控制器


我不反对他们,如果iOS愿意,我会使用他们 让我来。我只是对上述行为感到好奇


我会将记录的消息理解为苹果对提供根视图控制器的温和但持久的推动。大多数应用程序已经使用了视图控制器,所以这不是一个很大的改变,但是可能有很多应用程序没有正确地将窗口的
rootViewController
属性设置为它们的顶级视图控制器。

您刚刚将“视图”与“文件所有者”连接起来..只需删除该连接并运行应用程序。单击“查看”并查看“连接检查器”区域,然后删除我告诉的连接..我不知道确切原因..但我遇到了此问题,已清除。
可能是您在其中使用了一些tableview或其他视图。因此,应用程序。需要一个视图控制器才能启动。如果您删除该连接,它将只运行您在代码中编写的内容…

让我告诉您原因

在以前的版本中,基于窗口的应用程序用于构建多视图应用程序。但在Xcode 4.2中,基于窗口的应用程序不再存在。空应用程序用于建立多视图程序

基于窗口的应用程序和空应用程序的区别在于前者有一个主窗口MainWindow.xib

当程序启动时,iPhone首先构建主窗口。主窗口中的内容将被加载和生成。但是如果您想要更多功能,例如多视图,您仍然需要新的根视图控制器。根视图控制器可以帮助管理程序中的视图。在新版Xcode 4.2中,需要一个根视图控制器

在新版中,空应用程序中没有MainWindow.xib。AppDelegate将创建一个窗口。它需要一个根视图控制器。因此,最好的方法是使用XIB为MainWindow的接口创建UIViewController子类。但在旧版本中,不需要XIB


明白了吗?如果没有根视图控制器,您将不会收到错误,但是如果没有根视图控制器,您几乎无法执行任何操作。这就是警告总是出现的原因。

我可以问一下为什么不想使用视图控制器吗?它们在你将遇到的许多iOS代码中都是非常方便和常见的地方。我对它们没有任何异议,如果iOS希望我使用的话,我会使用它们。我只是对上面的行为感到好奇。+1通过希望窗口有一个根视图控制器,底层代码可以安全地做出一些假设,使UIKit工程师更容易处理。@Enchilada您刚才是否查看了我的答案以消除错误“在应用程序启动结束时,应用程序预计将有一个根视图控制器…”。。。?????