【问题标题】:Window's root view controller is not Split view controllerWindows 根视图控制器不是拆分视图控制器
【发布时间】:2015-02-27 14:33:49
【问题描述】:

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

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

【问题讨论】:

  • 您能否添加一个链接,指向您在情节提要中设置拆分视图控制器时所遵循的指南?
  • 我没有遵循指南,我只是将拆分视图控制器添加到情节提要中,将其设置为初始视图控制器,并将我的主视图和详细视图连接到适当的插座。如果我什至将基本主/详细视图项目生成的相同故事板放入我的项目中,也会发生相同的行为(主视图控制器是根视图)

标签: ios ios7 xcode6 uisplitviewcontroller


【解决方案1】:

这是因为UISplitViewController 在 iOS7 的 iPhone 中不受支持,仅在 iPad 中。

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

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

【讨论】:

  • @DanF 哦,对不起,不知道。我用对我有用的代码编辑了答案。请告诉我它是否有效
  • 即使我尝试获取根视图控制器的拆分视图控制器属性,它仍然是 nil
  • 好吧,只是尝试了使用navigationController,没有,在这两种情况下,我都将self.window.rootViewController 作为splitViewcontroller。所以我想我的答案没有真正的价值,因为我看不到你的问题。你是什​​么类型的视图控制器,或者可以用你的故事板发布截图
  • 不管master是什么,都是项目有问题。我使用主/详细模板创建了一个新项目,并将该项目的故事板设为我项目的默认故事板,然后我复制了相同的问题。如果我将故事板放入主/详细模板项目中,它会正常运行。它与故事板无关,只是项目
【解决方案2】:

所以这最终成为一个非常模糊的问题。这似乎是由 iOS 8 SDK 和 Xcode 6 处理故事板和大小类的方式引起的。我打算向苹果提交一份错误报告,但重现该报告的步骤很简单:

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

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

解决此问题的方法是禁用情节提要上的尺寸类别。我推测 Xcode 6 和 iOS 8 SDK 处理 iPad 的尺寸等级与通用应用程序构建的方式导致这在 iOS 7 目标上不起作用,但关闭尺寸等级可以解决问题。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多