2017-01-31 18 views
0

ビューコントローラがビューを引き継ぐ前にビューコントローラの変数を初期化しようとしていますが、どのように初期化しようとしても動作しません。値がデフォルト値の場合問題の一部は、変数の値を設定しようとすると問題の変数を含むビューがゼロであるようです。なぜこれがわからないのですか?どんな助けもありがとう。ありがとう!ここに私のコードは次のとおりです。変数の初期化で問題が発生しました

override func setStartPosition() 
{ 
    if sessionNameIndex != nil 
    { 
     if let curSession = ShareData.sharedInstance.sessionDataObjectContainer[sessionNames[sessionNameIndex]] 
     { 
      initialValue = YesNo(rawValue: (curSession.currentValue)) 

      if mySessionDisplay == nil 
      { 
       mySessionDisplay = SessionDisplayView(frame: self.view.frame) 
       if mySessionDisplay == nil 
       { 
        var shouldneverbehere = 0 //Always goes here! 
       } 
       else 
       { 
        mySessionDisplay.onView(index: 2, sessionName: sessionNames[sessionNameIndex]) 
        mySessionDisplay.curScene.setStartPosition(newValue: val!) 
       } 

      } 



     } 
    } 
} 

この関数は、次のコードで呼び出されます:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 

    if let destination = segue.destination as? SessionDisplayViewControllerTwo 
    { 
     if let myNames = sender as? [String] 
     { 
      destination.sessionNames = myNames 
      destination.sessionNameIndex = 1 
      destination.setStartPosition() 
     } 
    } 
} 

は、あなたがより多くの情報が必要なら、私に教えてください。もう一度、この問題を検討していただきありがとうございます。

+0

'mySessionDisplay'はIBOutlet接続ですか? – ebby94

+0

あなたのコードを読むのが難しいと思っています。同じ行に中かっこをつけたif文と次のif文は、自分のスタイルに近いものですが、明らかにmySessionDisplayは2番目の場合は* still * nilです。しかし、私はSessionDisplayViewControllerTwoを見ています。それはあなたのネストされたifでチェックしているものではありません。これを説明するためにもっとコードを提供できますか? – dfd

+0

正確にどの変数がnilであり、問​​題のある変数を追加してください – muescha

答えて

0

ビューコントローラのビューはまだprepareForSegueにロードされていません。彼のコメントで@mueschaが示唆するように、prepareForSegueにプロパティを設定してから、ビューにインストールする前にviewDidLoadまたはviewWillAppearを待つ必要があります。 SessionDisplayViewを手作業で作成しようとすると失敗したのはなぜかわかりませんが、いずれの場合でもprepareForSegueにビューを作成しようとしないでください。解決策は「しないでください」です。

+0

問題は、ビューmySessionDisplay内で変数をどのように設定しようとしても、値を受け取らないということです。私は、これをどうやって行うのか分かりません。提示されたコードは、それが行われるべき方法ではないかもしれませんが、失敗した他の方法も試みました。 –

+0

投稿したアプローチは間違っています。 prepareForSegueで値を渡し、viewDidLoadまたはviewWillAppearのビューにそれらをインストールします。 (viewDidLoadでは、ビューはロードされていますが、レイアウトは最終的なものではありません。)質問を編集して、そのように動作するコードを表示しますが失敗し、何が間違っているのかを詳しく説明します。 –

+0

さて、私は自分で解決しようとしていた問題を解決しました。あなたのご意見ありがとうございます。 2つの問題があることが判明しました.1つは、生の整数を列挙に正しく変換しません。少なくとも、私はそれを間違って変換していました。 2つ目は、何らかの理由で、カスタム関数sksceneのsetStartPosition関数がinit関数が呼び出される前に発生していると考えていました。それは後に起こるので、setStartPosition関数でグラフィックの位置を手動で変更する必要がありました。長い話を簡単に言えば、私が解決しようとしていた問題は解決されました。 –

関連する問題