[英]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
}
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.