window.rootViewController怎么可能不是initialViewController?

时间:2014-12-07 22:06:04

标签: ios xcode swift interface-builder uisplitviewcontroller

我正在尝试将现有的iOS应用转换为根视图的主详细信息视图。我在Xcode中创建了一个新的Master Detail项目作为模板。但是,尽管具有相同的 AppDelegate.swift 和几乎相同的故事板文件,但我遇到了window.rootViewController不是故事板中定义的initialViewController导致的异常。 / p>

来自 Info.plist

<key>UIMainStoryboardFile</key>
<string>Main</string>

来自 Main.storyboard

<document ... initialViewController="Z2E-r9-vU1">
  <!-- ... -->
  <!--SplitViewTitle-->
  <scene sceneID="dlH-f9-ql3">
    <objects>
      <splitViewController title="SplitViewTitle" id="Z2E-r9-vU1" sceneMemberID="viewController">

此处出现异常 AppDelegate.swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate {
  var window: UIWindow?
  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    let splitViewController = self.window!.rootViewController as UISplitViewController

在Xcode创建的默认主详细信息项目中,self.window!.rootViewController将是UISplitViewController,但在我的应用中,它将是UINavigationController,具体来说,是主人的导航控制器图。

这是怎么回事?根据我对rootViewController的理解,它应该在启动时设置为initialViewController。引用一些官方documentation

  

在发布时iOS:

     
      
  • 实例化一个窗口。
  •   
  • 加载主故事板并实例化其初始视图控制器。
  •   
  • 将新视图控制器分配给窗口的rootViewController属性,然后使窗口可见。
  •   

更新

这开始看起来像是Xcode中的一个错误。我只是通过创建一个新的Master Detail项目,将Deployment Target设置为7.1并在iPhone 5(7.1)模拟器上运行它来复制确切的例外。它在iPhone 5(8.1)模拟器上运行正常。

更新2: 我一直在使用Xcode Version 6.1 (6A1052c)。我刚刚升级到最新版本Version 6.1.1 (6A2008a),但它无法解决这个易于重现的问题。我将向Apple提交一份错误报告并继续。

1 个答案:

答案 0 :(得分:1)

您无法在8.0之前的iOS版本中使用适用于iPhone的分割视图控制器 - 仅适用于iPad。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISplitViewController_class/index.html

In iOS 8 and later, you can use the UISplitViewController class on all iOS devices; in previous versions of iOS, the class is available only on iPad.