2014-12-07 15 views
0

我正试图将我现有的iOS应用程序转换为具有主视图的主细节视图。我在Xcode中创建了一个新的Master Detail项目来充当模板。但是,尽管故事板文件中具有相同的AppDelegate.swift和几乎相同的故事板文件,但我遇到了window.rootViewController不是故事板中定义的initialViewController导致的异常。window.rootViewController怎么可能不是initialViewController?

的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创建的默认Master Detail项目中,self.window!.rootViewController将是UISplitViewController,但在我的应用程序中,它将是UINavigationController,特别是主视图的导航控制器。

这怎么可能?从我对rootViewController的理解中,它应该在发布时设置为。引用一些官方documentation

在启动时的iOS:

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

更新:

这是开始看起来像在Xcode的错误。我只是通过创建一个新的主细节项目来再现确切的异常,将部署目标设置为7.1并在iPhone 5(7.1)模拟器上运行它。它可以在iPhone 5(8.1)模拟器上正常工作。

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

回答

1

在8.0之前的iOS版本中,您无法使用SplitViewController for 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.

+0

谢谢,但我的问题是 “为什么是不是RootViewController的?”因为我已经将它设置为initialViewController。我宁愿不必为某些应该是默认行为的程序修复程序。 – 2014-12-08 16:54:00

+0

因此,当您在调试中检查rootViewController时,它不是SplitViewController类吗? – 2014-12-09 12:24:04

+0

这是正确的,至少对于iPhone 5(7.1)的情况。 – 2014-12-09 22:24:51