加载视图会导致程序崩溃

时间:2016-03-31 16:07:17

标签: xcode swift view viewcontroller fatal-error

我还在学习视图是如何工作的,但我发现了一个我无法解决的问题...... 我得到了类GraficsBalancGlobalViewController,它是类GraficViewController

的子类
class GraficsBalancGlobalViewController: GraficViewController {
  @IBAction func afegeixGrafic(sender: NSButton) {
    addNewGrafic() // which is set on the GraficViewController
  }
}

当我执行IBAction afegeixGrafic时,我的程序在下面标记的行上崩溃:

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有关,但我不知道它可以是什么......它被初始化了..

  • 只是提到GraficView(frame: frame)不是问题,因为我尝试并运作良好。

1 个答案:

答案 0 :(得分:0)

我相信!是你的困境的罪魁祸首:

@IBOutlet weak var scrollView: NSView!

Xcode确实为! s强制解包(IBOutlet)生成此条目,但它应该是可选的(?)因为你没有保证 < / em>该引用将被设置。如果你有一些依赖于scrollView存在的逻辑,你可以依靠didSet来实现:

@IBOutlet weak var scrollView: NSView? {
    didSet {
        guard let sview = scrollView else {
            return // because scrollView is nil for some reason
        }
        // do your scrollView existence dependent logic here (eg. reload content)
    }
}

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)
}

我希望这会有所帮助。