我一直停留在這幾天來分配 -「意外地發現無」 - 委派subVC
graphView
是我的UI類的實例 - 我聲明我CalculatorViewDataSource協議GraphView
類以外,包含weak var calcDataSource: CalculatorViewDataSource?
在裏面。
,在graphView出口的didSet {}我嘗試委託設置爲我承擔的是使用下面的代碼現有CalculatorViewController:
if let vc = splitViewController?.viewControllers {
println(vc)
println(vc.count)
if let fst = vc.first {
println(fst.subviews)
println(fst.subviews.first)
}
}
graphView.calcDataSource = splitViewController!.viewControllers.first!.subviews.first as CalculatorViewController
的代碼編譯,但我崩潰與 「意外地發現無」 當我到達graphView.calcDataSource
(輸出)
[<UINavigationController: 0x7b71bd10>] 1 nil fatal error: unexpectedly found nil while unwrapping an Optional value
(故事板)
SplitViewController - NavigationController - (Master) CalculatorViewController
I
NavigationController - (Detail) GraphViewController`
- 是語法或分配錯了嗎?
- 我想從細節委託給一個UISplitView的masterView,我應該嘗試在masterView中設置委託嗎?這是否假設detail/graphView已經存在? (這似乎是什麼(errors creating a delegate from UISplitViewDetail to master in Swift)的暗示)
========
解決了!
我工作圍繞這一問題,從內部prepareForSegue 工作(與按鈕故事板賽格瑞稱爲「顯示圖形」)
//CalculatorViewController.swift:
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) {
if (segue!.identifier == "Show Graph") {
var yourNextViewController = (segue!.destinationViewController as UINavigationController)
var detail = yourNextViewController.viewControllers[0] as GraphViewController
var tempview = detail.view // FORCES THE VIEW object into existence, without this it will compile, but next line will crash at runtime (graphView nil)
detail.graphView.calcDataSource = self
}
}
注意var tempview = detail.view
是這裏的關鍵,儘管沒有被使用。我的理解,因爲它建立視圖和出口..
展開全部自選,不要使用''特別是在調試!同時記錄你的splitViewController,第一個viewController等,看它是否在那裏,或者有多少。打印是你的朋友 – Kametrixom
如何正確地登錄風險投資?用print()重載didLoad()?我如何爲通過故事板創建的VC(如splitViewController)做到這一點? – John