我正試圖將我現有的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提交一份錯誤報告,然後繼續。
謝謝,但我的問題是 「爲什麼是不是RootViewController的?」因爲我已經將它設置爲initialViewController。我寧願不必爲某些應該是默認行爲的程序修復程序。 – 2014-12-08 16:54:00
因此,當您在調試中檢查rootViewController時,它不是SplitViewController類嗎? – 2014-12-09 12:24:04
這是正確的,至少對於iPhone 5(7.1)的情況。 – 2014-12-09 22:24:51