2016-03-31 4 views
0

ビューがどのように動作するか私はまだ学んでいるが、私はクラスのサブクラスであるクラスGraficsBalancGlobalViewControllerを得ました... 私は解決できなかった問題を発見GraficViewControllerは、プログラムの暴走になり

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

そして、私はライン上IBAction afegeixGrafic私のプログラムのクラッシュを実行すると、以下のマーク:

012:

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 
} 

コンパイラがそれを言います

GraficViewControllerのボタン(IBAction)がうまくいきます!だから、私はそれと作品を試すためGraficView(frame: frame)が問題ではないことを言及する

  • ..私は問題がscrollViewと関連していると仮定し、私は...それが初期化されることができるものの見当がつかないよく
+0

あなたの 'IBOutlet'で' scrollView'をチェックしましたか? – Caleb

+0

ブレークポイントをこの行に追加し、ブレークタイプ "p scrollView"をデバッガコンソールに追加します。 scrollViewはnilですか? – Darko

+0

@Drakoはい!あなたは右のscrollViewViewはnillですが、それは存在する、それは画面上にある! –

答えて

0

私は!はあなたの苦境の犯人であると信じています:

@IBOutlet weak var scrollView: NSView! 

XcodeはIBOutletのための力アンラップ(!)でこのエントリを生成し、それは本当にオプション(?)でなければなりませんので、あなたは保証がありません参照が設定されるとき。あなたは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) 
} 

私はこのことができます願っています。

+0

実際には存在しませんまだ依存ロジックです。 @IBActionの 'afegeixGrafic'をクリックすると、ビューに何も表示されません。変更を使用して、何も書き込まずに//ここにスクロールビューの存在依存ロジックを行います。私が望んだのは、スクロールビュー内の新しいビューを作成することです。おそらく私はこれについて間違っているかもしれません。 –

+0

'@IBAction afegeixGrafic'を使用するときにスクロールビューがnilである可能性はありますが、' @IBActionファンクションボタン 'はありません'? –

+0

これらのアウトレット/アクションが特定の/確実な順序で設定されているという保証はありません。 (最近の編集で)上記を試してください – skim

関連する問題