2016-09-03 1 views
2

Я создал простую викторину, в которой будет указано, сколько вопросов пользователь ответил правильно и поместил их в ярлык в другое представление. Проблема в том, что, когда пользователь правильно отвечает на последний вопрос (массив), он не будет подсчитываться в моем счетчике, как это происходит с другими вопросами, а только переключает вид. Таким образом, вместо того, чтобы показывать 4 в следующем виде, оно отображает только 3, если на последний вопрос был дан правильный ответ. Все еще не понял. Любая помощь? Мой код:Последний элемент в массиве nil

func pickQuestion(){ 

    if questions.count > 0{ 

     qNumber = random() % questions.count 
     questions.shuffleInPlace() 
     qLabel.text = questions[qNumber].question 

     answerNumber = questions[qNumber].answer 

     for i in 0..<buttons.count{ 
      buttons[i].setTitle(questions[qNumber].answers[i], forState: .Normal) 

     } 

     questions.removeAtIndex(qNumber) 
    } 

    else { 

     NSLog("done") 

     self.performSegueWithIdentifier("Segue1", sender: self) 
    } 
} 

код кнопки, где я могу проверить, является ли ответ правильным или нет:

@IBAction func btn1(sender: AnyObject) { 

    if answerNumber == 0 { 
     pickQuestion() 
     count += 1 
    } 
    else { 
     NSLog("Wrong") 
     pickQuestion() 
    } 
} 

После немного отладки я обнаружил, что questions.removeAtIndex (qNumber) является тот, который удаляет массив (removeAtIndex используется для предотвращения повторения вопросов, когда уже ответили)

Я объявляю qNumber как:

qNumber = random()% questions.count

Как установить qNumber как текущий массив, который будет удален после ответа?

Я переключая вид в:

еще {

NSLog("done") 

    self.performSegueWithIdentifier("Segue1", sender: self) 
} 
+2

Не имеет значения, но вы должны следовать скоринговому соглашению о кодировании для имен переменных, то есть 'camelCase'. Все ваши переменные начинаются с символа капитала, то есть 'AnswerNumber',' QNumber' и т. Д. –

+0

Можете ли вы добавить код, когда ответ правильный, и вы увеличиваете значение счетчика. Я думаю, что вы просто не добавляете счетчик в нужную точку и вместо этого переключаете представления, прежде чем звонить, что увеличивает счетчик. – Nik

+0

Вы вставили код для отображения вопроса, но не для оценки ответа. – Shades

ответ

1

После отображения последнего вопроса, то удалить его из массива, что делает массив пуст. Затем, при ответе, у вас есть:

if answerNumber == 0 { 
     pickQuestion() 
     count += 1 
} 

код в функции проверяет, если questions.count больше 0, что это не так, и выполняет переход. Сессия происходит до того, как счетчик будет обновлен. Попробуйте изменить блок, чтобы сначала подсчитать количество:

if answerNumber == 0 { 
    count += 1 
    pickQuestion() 
} 
+0

Большое вам спасибо. он работает сейчас. Подсчет сначала сделал работу! – Rido

+0

@ Rido Обязательно – Shades