iOS:在展开Optional值时意外发现nil

时间:2016-01-20 02:05:32

标签: ios

收到以下错误:

  

致命错误:在解包可选值时意外发现nil

我正在申请注册表格。该应用程序允许用户创建要添加到表单的自定义问题。目前,我使用Singleton设计模式在编辑选项卡和用于显示表单的选项卡之间传递问题列表。

我的单身人士课程:

class Singleton {
    static let sharedInstance = Singleton()
    var questions: [Question] = []
}

在编辑表单中,用户将按下按钮以更新人们可以填写的表单。这是代码,也是我收到错误的地方:

var mySingleton: Singleton!

@IBAction func updateForm(sender: AnyObject) {
    for index in mySingleton.questions.count...questionsArray.count {
        mySingleton.questions.append(questionsArray[index])
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这是发生错误的地方:

for index in mySingleton.questions.count...questionsArray.count {
    mySingleton.questions.append(questionsArray[index])
}

循环的最终索引是questionsArray.count。当您访问questionsArray[questionsArray.count]时,您超出了数组的范围。永远不应该访问此索引。

相反,请将循环更改为以下内容:

for index in mySingleton.questions.count..<questionsArray.count {
    mySingleton.questions.append(questionsArray[index])
}

唯一的区别是...变为..<,以便省略导致错误的最后一个索引。

编辑:在回顾代码之后,mySingleton似乎永远不会被设置为等于任何东西。在执行此代码之前,您可以设置mySingleton = Singleton.sharedInstance,或者只是删除mySingleton并直接使用Singleton.sharedInstance