Если заявление, которое выполняет переход с UIPicker - PullRequest
0 голосов
/ 12 июня 2019

Я создаю приложение, в котором по определенному вопросу я могу использовать UIPicker, чтобы вернуться к предыдущим вопросам, однако я либо получаю ошибку, либо ничего не происходит при попытке использовать приложение.

Кроме того, все мои страницы Storyboard ID - это имя, которое я называю им для перехода.

Я попытался использовать оператор switch, но получаю слишком много ошибок, поэтому решил, что еслиоператоры могут пойти лучшепо порядку,

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, 
inComponent component: Int) {
        DiffQuestion.text = data[row]

        if (data == "Q1") {
        storyboard?.instantiateViewController(withIdentifier: "Q1") as? Q1; 
    performSegue(withIdentifier: "Q1", sender: self)
       }
    }

Текущая ошибка в моем операторе if "Двоичный оператор '==' не может быть применен к операндам типа '[String]' и 'String'". Я знаю, что, вероятно,неправильно структурирован, я все еще новичок во всем этом.

ОБНОВЛЕНИЕ: у меня в настоящее время написано так:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    DiffQuestion.text = data[row]

    if (data[row] == "Q1") {
        storyboard?.instantiateViewController(withIdentifier: "Q1"); performSegue(withIdentifier: "Q1", sender: self)
    }
    if (data[row] == "Q2") {
        storyboard?.instantiateViewController(withIdentifier: "Q2"); performSegue(withIdentifier: "Q2", sender: self)
    }
    if (data[row] == "Q3") {
        storyboard?.instantiateViewController(withIdentifier: "Q3"); performSegue(withIdentifier: "Q3", sender: self)
    }
    if (data[row] == "Q4") {
        storyboard?.instantiateViewController(withIdentifier: "Q4"); performSegue(withIdentifier: "Q4", sender: self)
    }
    if (data[row] == "Q5") {
        storyboard?.instantiateViewController(withIdentifier: "Q5"); performSegue(withIdentifier: "Q5", sender: self)
    }
    if (data[row] == "Q6") {
        storyboard?.instantiateViewController(withIdentifier: "Q6"); performSegue(withIdentifier: "Q6", sender: self)
    }

Q6 получает переход, как и Q4, но все остальноепросто выдает мне «Поток 1: SIGABRT»

Область отладки говорит:

Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Receiver () не имеет перехода с идентификатором« Q5 »'

1 Ответ

0 голосов
/ 12 июня 2019

Проблема здесь

if (data == "Q1") { // == can't be used to compare String and [String]

Заменить на

if data[row] == "Q1" { }

Также вы должны либо создать и использовать переход только с

performSegue(withIdentifier: "Q1", sender: self)

ИЛИ присутствует / push

 let vc =  storyboard?.instantiateViewController(withIdentifier: "Q1") as? Q1
 // present or push vc
  self.present(vc, animated: true, completion: nil)
/// or push
 self.navigationController?.pushViewController(vc, animated: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...