Window 的根视图控制器不是 Split 视图控制器

Window's root view controller is not Split view controller

我正在尝试修改我现有的应用程序以使用拆分视图控制器。我遵循示例 master/detail 项目结构,将一个拆分视图控制器添加到我的故事板中,使其成为初始视图控制器并且一切似乎都运行良好,直到我尝试 运行 该应用程序iOS 7模拟器。突然间,当我在 application: didFinishLaunchingWithOptions 中遇到我的断点时,self.window.rootViewController 现在是我的主视图控制器的类型,而不是拆分视图控制器本身。

我想也许我只需要将拆分视图控制器从根视图本身中取出并尝试 rootViewController.splitViewController 但那是 nil。我一定是错过了启用此拆分视图控制器的一些设置步骤,但我不知道它是什么。

因为UISplitViewController在iPhone在iOS7中不支持,只在iPad中支持。

如果您 运行 您在 iPad iOS7 中的代码,您将看到您的 UISplitViewController

仅在 iOS8 中,Apple 还添加了对 iPhone 的支持。

所以这最终成为一个非常晦涩的问题。这似乎是由 iOS 8 SDK 和 Xcode 6 处理情节提要和大小 类 的方式引起的。我打算向 apple 提交错误报告,但重现此错误的步骤很简单:

  1. 创建一个新的 master/detail 应用程序
  2. 将部署目标设置为低于 8.0(7/7.1 有效)
  3. 将应用程序类型从 "Universal" 更改为 "iPad"
  4. 您必须从生成的应用程序委托中注释掉这一行,它将在 iOS 7 目标中崩溃:

    navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem;
    
  5. 运行 在 iPad 模拟器上 iOS 7.1

此问题的解决方法是在故事板上禁用大小 类。我推测 Xcode 6 和 iOS 8 SDK 处理 iPad 的大小 类 与通用应用程序构建的方式导致这不适用于 iOS 7 个目标,但关闭大小 类 可以解决问题。