如何在 swift 中启动时加载详细视图控制器(从拆分视图)?

How to load a detailed view controller (from split view) on start up in swift?

当我的应用程序首次在 iPad 模拟器上启动时,mainVC table 从我的模型中加载并列出数据,但详细视图控制器不会。它只加载和列出故事板中的数据。我希望它列出主菜单中的第一项(例如)。

我在 RayW 教程中看到这是通过 AppDelegate 方法 didFinishLaunchingWithOptions 完成的,但他们没有使用默认的拆分视图代码,而是使用默认代码的一些变体从头开始重新创建它。他们是这样做的:

let splitViewController = self.window!.rootViewController as! UISplitViewController
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let masterViewController = leftNavController.topViewController as! MasterViewController
let detailViewController = splitViewController.viewControllers.last as! DetailViewController 
let firstMonster = masterViewController.monsters.first
detailViewController.monster = firstMonster
return true

以下是默认代码加上(在空行之后)尝试将默认代码与上述方法协调。

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    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 leftNavController = splitViewController.viewControllers.first as! UINavigationController
    let masterViewController = leftNavController.topViewController as! MasterViewController
    let detailViewController = navigationController.topViewController as! DetailViewController
    let firstRecord = masterViewController.records.first
    detailViewController.record = firstRecord

    return true
}

在我最初的尝试中,我绕过了错误的控制器,但上面的代码至少可以编译和运行,但它不会将第一条记录加载到 detailVC 中。

这是正确的方法吗,我只是遗漏了一些东西,或者有其他方法可以做到这一点吗?

更简单的方法是在 MasterView Controller 的 viewDidLoad 方法中实例化细节:

override func viewDidLoad() 
{
    super.viewDidLoad()

    startingDetailedVCData = theData

    if let split = self.splitViewController {
        let controllers = split.viewControllers
        self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController

        self.detailViewController?.detailedData = startingDetailedVCData
    }
}