【发布时间】:2016-07-20 07:19:53
【问题描述】:
使用第一个时滚动视图怎么可能为零:@IBAction afegeixGrafic 但使用 @IBAction func button 时它不是'?
我得到了 GraficsBalancGlobalViewController 类,它是 GraficViewController 类的子类
class GraficsBalancGlobalViewController: GraficViewController {
@IBAction func afegeixGrafic(sender: NSButton) {
addNewGrafic() // which is set on the GraficViewController
}
}
当我执行IBActionafegeixGrafic 时,我的程序在下面标记的行崩溃:
class GraficViewController: NSViewController, GraficViewDataSource {
@IBAction func button(sender: NSButton) {
addNewGrafic()
}
func addNewGrafic() {
let frame = NSRect(x: 0, y: 0, width: self.view.bounds.width , height: self.view.bounds.width * 0.25)
let nouGrafic = GraficView(frame: frame)
scrollView.addSubview(nouGrafic) <---- BREAK here!
}
@IBOutlet weak var scrollView: NSView!
//...more code
}
编译器说:
致命错误:在展开可选值时意外发现 nil
但GraficViewController 中的按钮 (IBAction) 效果很好!!所以我认为问题与scrollView有关,但我不知道可以是什么..它被初始化了..
我也试试这个:
@IBOutlet weak var scrollView: NSView? {
didSet {
guard let sview = scrollView else {
addNewGrafic()
return // because scrollView is nil for some reason, but don't work
}
}
}
完整代码:
class GraficsBalancGlobalViewController: GraficViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
@IBAction func afegeixGrafic(sender: NSButton) {
//performSegueWithIdentifier("Nou Grafic", sender: nil)
//let viewController = storyboard!.instantiateControllerWithIdentifier(identifier!) as! GraficsBalancGlobalViewController
addNewGrafic()
}
@IBAction func eliminaGrafic(sender: NSButton) {
}
}
【问题讨论】:
-
scrollView在您的最后一个代码块中将始终为 nil - 这就是警卫正在检查的内容 - 只有当它为 nil 时才会进入 else -
是的,抱歉,这可能会造成混淆。不关心最后一个代码部分,重要的是第一个。
-
向我们展示错误点的调用堆栈。
-
@LouFranco 使用
IBAction button时效果很好,但使用IBAction afegeixGrafic会发生我要在我的问题上添加的事情! -
这里没有足够的信息来帮助您。它为 nil 的最可能原因是它被调用的时间——我们可以在调用堆栈中看到这一点。
标签: xcode swift view viewcontroller fatal-error