2016-08-05 12 views
1

ためにトラブルになります。私はUISplitViewControllerのための拡張機能を削除して、このようなdestinationViewControllerを準備しかしときUISplitViewControllerの拡張子は、私はシンプル<code>UISplitViewController</code>の拡張子を持つアプリ

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'The content view controller argument must be the root of its associated view controller hierarchy.'

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if let searchResultsViewController = (segue.destinationViewController as? UISplitViewController)?.masterViewController as? SearchResultsViewController { 
     searchResultsViewController.mode = mode 
    } 
} 

そしてそれdoesntの仕事エラーのため:セグエが行われているとき、私はこのように私のdestinationViewControllerを準備します。

if let searchResultsViewController = ((segue.destinationViewController as? UISplitViewController)?.viewControllers.first as? UINavigationController)?.topViewController as? SearchResultsViewController { 
    //prepare controller 
} 

IT WORKS

What is the reason that it is not working in first case?

答えて

1

何か他のものにmasterViewControllerからあなたの計算された変数の名前を変更してみてください。 UISplitViewControllerの内部財産を無効にしているようです。

これは動作し、UISplitViewControllerのセットアップ中に呼び出されません。

var masterVC: UIViewController? { 
    return (viewControllers.first as? UINavigationController)?.topViewController 
} 

これはSDK内で何かによって呼び出され、クラッシュします。

var masterViewController: UIViewController? { 
    return (viewControllers.first as? UINavigationController)?.topViewController 
} 
+0

どこかに文書化されていますか? –

+0

この問題を解決するために何をすべきか理解しています。なぜ私はこれをしなければならないのか説明が必要です。 –

+1

@BartłomiejSemańczykこれは文書化されていませんが、[private headers](https://github.com/nst/iOS-Runtime-Headers/blob/1bdbef2afe228bd5e660e247cdb149e1b39a85c4/Frameworks/UIKit.framework/UISplitViewController)から問題のプロパティを見ることができます.h#L307) – venom889

関連する問題