在Swift中不是初始的主 - 细节视图

时间:2015-06-23 08:27:18

标签: ios swift appdelegate master-detail

我是Swift的新手。

我想构建一个不是应用程序首字母的Master-detail视图。当我在Master-detail视图之前设置其他视图时,Xcode使用Master-detail Application生成的AppDelegate.swift会崩溃。

这是AppDelegate.swift的代码:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        let splitViewController = self.window!.rootViewController as! UISplitViewController
        let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
        navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
        splitViewController.delegate = self

        let masterNavigationController = splitViewController.viewControllers[0] as! UINavigationController
        let controller = masterNavigationController.topViewController as! MasterViewController
        controller.managedObjectContext = self.managedObjectContext
        return true
    }

我收到以下错误:

Could not cast value of type 'UIViewController' (0x11079e418) to 'UISplitViewController' (0x1107a8eb8).
(lldb) 

我的Main.storyboard:

Main.storyboard

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您的初始视图控制器是UIViewController,但在application(application:, didFinishLaunchingWithOptions:)的开头,您仍然表现为屏幕上的第一个视图是UISplitViewController(请参阅let splitViewController = self.window!.rootViewController as! UISplitViewController )。

为了让不同的视图成为初始视图控制器,您需要适当地更新该代码,以便首先处理不同的视图控制器。

答案 1 :(得分:0)

这是正常的,因为您试图在此行中将UIViewController转换为UISplitViewController

let splitViewController = self.window!.rootViewController as! UISplitViewController

您必须将拆分设置为初始视图控制器,或者更改代码并将root作为普通UIViewController处理。