2016-12-21 1 views
0

Есть 4 вида контроллеры: raceViewController raceInfoViewController abilityCalcViewController abilityFinalViewControllerготовят к выпуску SEGUE с несколько ViewControllers Не 100% работает

Краткий обзор, как приложение работает. Сначала пользователь запускается в свойствеCalcViewController, они обновляют свою статистику, а затем, когда это делается, они нажимают кнопку «Выбрать гонки», которая затем переходит в raceViewController. Здесь есть две кнопки 1, ведущие к raceInfoViewController, а другая - к функцииFinalViewController. Каждый из них будет иметь свой собственный набор информации для передачи между ViewControllers.

Код, который у меня есть:

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

Мой вопрос, когда я нажимаю на кнопку, которая приводит к abilityFinalViewController или кнопку собирается raceInfoViewController он переходит, но тогда ни один из данных не передается. Таким образом, destFinalViewController.strStatScore = strStatScore кажется пустым, когда он добирается до следующих пунктов назначения. Что мне не хватает?

+0

Я подозреваю, что он не входит ни в один из ваших 'if raceTable.indexPathForSelectedRow' случаев. Перерыв и проверка 'raceTable.indexPathForSelectedRow'. – shallowThought

+0

Я устал, просто делаю простой отпечаток и вижу, что говорит консоль. Ничего не печатает. Это то, о чем вы говорите? – Micheal

+0

Plese [edit] (http://stackoverflow.com/posts/41267524/edit) ответ с вашим заявлением на печать и его выходом. – shallowThought

ответ

1

Обратите внимание, что код prepareForSegue, который решает, что делать на основе идентификатора segue, является хрупким. Если вы забыли установить идентификатор или иметь опечатку в своем идентификаторе, это не сработает.

В Swift, я предпочитаю использовать переключатель заявление, что переключатели на основе класса контроллера представления назначения:

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 должен называться AbilityFinalViewController, а raceInfoViewController должен быть RaceInfoViewController.

+0

OMG, который работал красиво. Спасибо за это и за помощь по именованию. Я этого не знал. Я сам участвую в себе быстро. Я поеду и обновлю все это. – Micheal

Смежные вопросы