Я застрял на этом в течение последних нескольких дней -«неожиданно нашел ноль» - делегировать задания в subVC
graphView
мой экземпляр класса UI - Я объявляю свой протокол CalculatorViewDataSource вне GraphView
класса, которые содержат weak var calcDataSource: CalculatorViewDataSource?
в этом.
в моем GraphViewController, в didSet {} выпускного graphView Я пытаюсь установить делегат на то, что я предполагаю, что это существующий 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`
- синтаксис или назначение не так?
- Я пытаюсь делегировать masterView UISplitView из деталей, следует ли мне попытаться установить делегат в masterView? Означает ли это, что деталь/graphView уже существует? (Это, кажется, что (errors creating a delegate from UISplitViewDetail to master in Swift) намекает на)
========
РЕШИТЬ!
Я работал вокруг этого вопроса, работая внутри prepareForSegue (с раскадровки Segue на кнопку под названием «Show Graph»)
//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
имеет решающее значение здесь, несмотря на не используется. Я понимаю, как это настройка вида и выход ..
UnWrap все УСТРОЙСТВА, не используйте '' особенно при отладке!. Также зарегистрируйте свой splitViewController, первый viewController и т. Д., Чтобы узнать, есть ли там или сколько там. Печать - ваш друг – Kametrixom
Как правильно регистрировать VC? перегрузка didLoad() с помощью print()? как это сделать для VC, созданных с помощью раскадровки, например splitViewController? – John