简体   繁体   English

SWIFT-致命错误:解开可选值时意外发现nil

[英]SWIFT - fatal error: unexpectedly found nil while unwrapping an Optional value

I am making a simple trivia app to help learn the language. 我正在制作一个简单的琐事应用程序,以帮助学习该语言。 Currently I am working on the next question UIButton. 目前,我正在研究下一个问题UIButton。 I have no idea what I am doing wrong. 我不知道我在做什么错。

func nextQuestion() {
    currentQuestion += 1

    var newQuestion: AnyObject = arrayOfQuestions[currentQuestion]
    questionCorrectAnswer = newQuestion[9].integerValue

    firstAnswer.hidden = false
    secondAnswer.hidden = false
    thirdAnswer.hidden = false
    fourthAnswer.hidden = false

    firstAnswer.setTitle("\(newQuestion[1])", forState: UIControlState.Normal)
    secondAnswer.setTitle("\(newQuestion[2])", forState: UIControlState.Normal)
    thirdAnswer.setTitle("\(newQuestion[3])", forState: UIControlState.Normal)
    fourthAnswer.setTitle("\(newQuestion[4])", forState: UIControlState.Normal)

    questionLabel.text = "\(newQuestion[0])"

    myNextQuestion.hidden = true

}

EDIT: 编辑:

var newQuestion : AnyObject = arrayOfQuestions[currentQuestion]

my newQuestion variable is set to my array of questions. 我的newQuestion变量设置为我的一系列问题。

    let firstQuestion :AnyObject = Question(question: "What was the first planet to be discovered using a telescope, in 1781?", answerOne: "Mars", answerTwo: "Jupiter", answerThree: "Uranus", answerFour: "Mercury", correctAnswer: 3)
    let secondQuestion = Question(question: "Who averaged 1 patent for every three weeks of his life?", answerOne: "Ben Franklin", answerTwo: "Thomas Edison", answerThree: "Henry Ford", answerFour: "Ezra Gilliland", correctAnswer: 2)
    let thirdQuestion = Question(question: "Which island is the world's largest island?", answerOne: "Iceland", answerTwo: "Australia", answerThree: "Hawaii", answerFour: "Greenland", correctAnswer: 4)
    let fourthQuestion = Question(question: "What is the diameter of the Earth?", answerOne: "5,000 Miles", answerTwo: "6,000 Miles", answerThree: "8,000 Miles", answerFour: "10,000 Miles", correctAnswer: 3)
    let fifthQuestion = Question(question: "The US is the world's 5th largest producer of potatoes. What are the two top potato producing countries?", answerOne: "Canada/Italy", answerTwo: "China/Russa", answerThree: "China/Spain", answerFour: "Hawaii/Russia", correctAnswer: 2)
    let sixthQuestion = Question(question: "What is the symbol for iron on the periodic table?", answerOne: "Fe", answerTwo: "Ne", answerThree: "Se", answerFour: "Io", correctAnswer: 1)
    let seventhQuestion = Question(question: "The Hubble Telescope is named after which astronomer?", answerOne: "Frank Hubble", answerTwo: "Timothy Hubble", answerThree: "Edwin Hubble", answerFour: "Roger Hubble", correctAnswer: 3)
    let eighthQuestion = Question(question: "What year did the Apple's first iPhone become available?", answerOne: "2007", answerTwo: "2005", answerThree: "2005", answerFour: "2003", correctAnswer: 1)
    let ninethQuestion = Question(question: "OS computer abbreviation usually means what?", answerOne: "Optical Sensor", answerTwo: "Operating System", answerThree: "Open Software", answerFour: "Operating Sensor", correctAnswer: 2)
    let tenthQuestion = Question(question: "Where was the first mouse designed?", answerOne: "Apple", answerTwo: "Microsoft", answerThree: "Xerox", answerFour: "Hewlett-Packard", correctAnswer: 3)

    //Array of Questions Set

    arrayOfQuestions = [firstQuestion, secondQuestion, thirdQuestion, fourthQuestion, fifthQuestion, sixthQuestion, seventhQuestion, eighthQuestion, ninethQuestion, tenthQuestion]

When I run the app on my phone, I answer the question and I hit Next Question and the app crashes. 当我在手机上运行该应用程序时,我回答了问题,然后点击了下一个问题,应用程序崩溃了。 I don't really know what the error is telling me. 我真的不知道错误告诉我什么。 Please explain your answers! 请解释您的答案!

Make sure that the newQuestion array is not nil and that it has a non-nil value for index 10. 确保newQuestion数组不是nil ,并且它的索引10的值是非nil。

Feel free to update your question with the contents of this array if what I mentioned here is already fulfilled. 如果我在这里提到的内容已经实现,请随时使用此数组的内容更新您的问题。

Edit 编辑

Now that I can see more of your code, it's quite obvious: 现在,我可以看到更多的代码,这很明显:

You're saying newQuestion[9].integerValue but you should use newQuestion[5].integerValue . 您是在说newQuestion[9].integerValue但您应该使用newQuestion[5].integerValue The integer value you're looking for is placed at index 5, not 9. 您要查找的整数值位于索引5,而不是9。

I might be wrong, but the following lines seems erroneous: 我可能是错的,但以下几行似乎是错误的:

var newQuestion: AnyObject = arrayOfQuestions[currentQuestion]
questionCorrectAnswer = newQuestion[9].integerValue

You declare that the newQuestion is of the type AnyObject, which is not an array type, and then you dereference it in the next line as if it was an array! 您声明newQuestion属于newQuestion类型,它不是数组类型,然后在下一行中取消引用它,就好像它是数组一样! This triggers a fatal error! 这会引发致命错误!

I would suggest that you change the declaration of arrayOfQuestions into something like var arrayOfQuestions : Array<Question>() and look into using for-loops for some of the other functionality of nextQuestion() . 我建议您将arrayOfQuestions的声明arrayOfQuestions为类似var arrayOfQuestions : Array<Question>()并考虑将for-loops用于nextQuestion()某些其他功能。 Maybe something similar to the following: 也许类似于以下内容:

// Build the array of Questions
var arrayOfQuestions = Array<Question>()

arrayOfQuestions.append(Question(question: "Why?", answerOne: "Because", answerTwo: "Whatever", correctAnswer: 2))
arrayOfQuestions.append(Question(question: "How?", answerOne: "Like this!", answerTwo: "Don't know", correctAnswer: 1))
// ... repeat until you have all questions you want


func nextQuestion() {
    currentQuestionNumber += 1
    let numberOfQuestions = countElements(arrayOfQuestions)

    // To look at the current questions specifics either do this ...
    let currQuestion: arrayOfQuestions[currentQuestionCounter]         
    let question = currQuestion.question
    let correctAnswer = currQuestion.correctAnswer

    // ... or something like
    let question = arrayOfQuestions[currenQuestionNumber].question
    let correctAnswer = arrayOfQuestions[currentQuestionNumber].correctAnswer

    for (var i = 0; i < countElements(arrayOfQuestions); i++) {
        if i <= currentQuestionNumber {
            answer[i].hidden = false
            answer[i].setTitle(arrayOfQuestions[i].question, forState: UIControlState.Normal
        } else {
            answer[i].hidden = true;
        }   
     }

 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Swift:致命错误:在展开可选值时意外发现nil - Swift : fatal error: unexpectedly found nil while unwrapping an Optional value 快速致命错误:解开Optional值时意外发现nil - swift fatal error: unexpectedly found nil while unwrapping an Optional value Swift致命错误:解开Optional值时意外发现nil - Swift fatal error: unexpectedly found nil while unwrapping an Optional value 致命错误:在Swift 3中解开Optional值时意外发现nil - fatal error: unexpectedly found nil while unwrapping an Optional value in Swift 3 Swift-致命错误:解开Optional值时意外发现nil - Swift - Fatal error: unexpectedly found nil while unwrapping an Optional values Swift中的可选类型错误:致命错误:解开可选值时意外发现nil - Optional type error in Swift: fatal error: unexpectedly found nil while unwrapping an Optional value Xcode Swift:appDelgate.window! is nil :致命错误:在解开可选值时意外发现 nil - Xcode Swift : appDelgate.window! is nil : Fatal error: Unexpectedly found nil while unwrapping an Optional value 致命错误:在Tableview中展开Optional值时意外发现nil - fatal error: unexpectedly found nil while unwrapping an Optional value in Tableview 致命错误:解开可选值(lldb)时意外发现nil - fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) 致命错误:展开一个可选值(lldb)时意外发现nil - Fatal error: Unexpectedly found nil while unwrapping an Optional value (lldb)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM