準備

2016-12-21 8 views
0

4つのビューコントローラがあります。 raceViewController raceInfoViewController abilityCalcViewController abilityFinalViewController準備

クイック概要どのようにアプリの作品は。最初にユーザーはabilityCalcViewControllerで開始し、彼らの統計情報を更新します。それが終わったら、Select Races ButtonをクリックしてraceViewControllerに行きます。ここには、2つのボタン1がraceInfoViewControllerに、もう1つがcapabilitiesFinalViewControllerに接続されています。それぞれ異なるユーザーは、ViewControllers間を渡すための独自の情報セットを持ちます。私が持っている

コードは次のとおりです。私はabilityFinalViewControllerまたはそれが遷移するが、その後のデータのいずれも渡されないraceInfoViewControllerに行くボタンにつながるボタンをクリックしたときに

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    { 
     if segue.identifier == "abilityFinalViewController" 
     { 
      let destFinalViewController: abilityFinalViewController = segue.destination as! abilityFinalViewController 

      destFinalViewController.strStatScore = strStatScore 
     } 
     else if segue.identifier == "raceInfoViewController" 
     { 
      let destViewController: raceInfoViewController = segue.destination as! raceInfoViewController 
      // Dwarf 
      if raceTable.indexPathForSelectedRow == [0,0] 
      { 
       print(raceTable.indexPathForSelectedRow ?? 0) 
       destViewController.raceName = races[0] 
       destViewController.raceStat = stats[0] 
      } 

      // Elf 
      else if raceTable.indexPathForSelectedRow == [0,1] 
      { 
       destViewController.raceName = races[1] 
       destViewController.raceStat = stats[1] 
      } 

      // Gnome 
      else if raceTable.indexPathForSelectedRow == [0,2] 
      { 
       destViewController.raceName = races[2] 
       destViewController.raceStat = stats[2] 
      } 

      // Half Elf 
      else if raceTable.indexPathForSelectedRow == [0,3] 
      { 
       destViewController.raceName = races[3] 
       destViewController.raceStat = stats[3] 
      } 

      // Half-Orc 
      else if raceTable.indexPathForSelectedRow == [0,4] 
      { 
       destViewController.raceName = races[4] 
       destViewController.raceStat = stats[4] 
      } 

      // Halfling 
      else if raceTable.indexPathForSelectedRow == [0,5] 
      { 
       destViewController.raceName = races[5] 
       destViewController.raceStat = stats[5] 
      } 

      // Human 
      else if raceTable.indexPathForSelectedRow == [0,6] 
      { 
       destViewController.raceName = races[6] 
       destViewController.raceStat = stats[6] 
      } 

      // Ifrit 
      else if raceTable.indexPathForSelectedRow == [0,7] 
      { 
       destViewController.raceName = races[7] 
       destViewController.raceStat = stats[7] 
      } 

      // Oread 
      else if raceTable.indexPathForSelectedRow == [0,8] 
      { 
       destViewController.raceName = races[8] 
       destViewController.raceStat = stats[8] 
      } 

      // Sylph 
      else if raceTable.indexPathForSelectedRow == [0,9] 
      { 
       destViewController.raceName = races[9] 
       destViewController.raceStat = stats[9] 
      } 

      // Tengu 
      else if raceTable.indexPathForSelectedRow == [0,10] 
      { 
       destViewController.raceName = races[10] 
       destViewController.raceStat = stats[10] 
      } 

      // Undine 
      else if raceTable.indexPathForSelectedRow == [0,11] 
      { 
       destViewController.raceName = races[11] 
       destViewController.raceStat = stats[11] 
      } 
     } 
    } 

私の問題があります。だから、destFinalViewController.strStatScore = strStatScoreは、次の宛先に到達すると空白に見えます。私は何が欠けていますか?

+0

あなたの 'if raceTable.indexPathForSelectedRow'のいずれのケースにも入っていないと思われます。ブレークし、 'raceTable.indexPathForSelectedRow'をチェックしてください。 – shallowThought

+0

私は単純なプリントをしてコンソールに何が表示されているのか知りませんでした。何も印刷されません。それはあなたが指していることですか? – Micheal

+0

あなたのprintステートメントとその出力の答えを書いてください(http://stackoverflow.com/posts/41267524/edit)。 – shallowThought

答えて

1

segue識別子に基づいて何をすべきかを決定するprepareForSegueコードは脆弱であることに注意してください。識別子を設定するのを忘れた場合や、識別子に誤字がある場合は機能しません。スウィフトは

、私は先のビューコントローラのクラスに基づいてスイッチswitchステートメントを使用することを好む:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    switch segue.destinationViewController { 

    case let miniCarContainerViewController as MiniCartConatinerViewController: 
     //Code to configure MiniCartConatinerViewController 
     print("Destination is class MiniCartConatinerViewController") 

    case let addOnsItemViewController as AddonsItemViewController: 
     //Code to configure AddonsItemViewController 
     print("Destination is class MiniCartConatinerViewController") 

    default: 
     print("Destination is unknown class!") 
     break 
    } 
} 

それが正しいにあなたのローカル変数のキャストを与えるので、case let構文は、二重の義務を行うこと宛先ビュー・コントローラのクラスに基づいてタイプします。

ところで、クラス名とタイプ名は、常にSwiftの大文字で始まる必要があります。変数名は、小文字で始まる必要があります。したがって、abilityFinalViewControllerクラスの名前はAbilityFinalViewControllerraceInfoViewControllerの名前はRaceInfoViewControllerにする必要があります。

+0

OMGが美しく機能しました。それとネーミングヘルプに感謝します。私はそれを知らなかった。私は自分自身を迅速に教えています。私は行ってそのすべてを更新します。 – Micheal