NSUserDefaults objectForKey()接收错误

时间:2014-06-05 16:06:18

标签: cocoa-touch swift xcode6

我正在Swift中构建一个游戏,用于存储用户在NSUserDefaults中的高分,但是后来游戏一直在崩溃。我将其缩小到读取NSUserDefaults的高分,因此我制作了一个简单的应用程序来测试使用NSUserDefaults保存和读取值。我按顺序按顺序运行每个功能。这是代码:

@IBOutlet var valueTextfield: UITextField
@IBOutlet var keyTextfield: UITextField
@IBOutlet var valueLabel: UILabel

@IBAction func saveData(sender: UIButton){
    NSUserDefaults.standardUserDefaults().setObject(valueTextfield.text, forKey: keyTextfield.text)
}
@IBAction func forceSynchronise(sender: UIButton){
    NSUserDefaults.standardUserDefaults().synchronize()
}

@IBAction func refreshLabel(sender: UIButton){
    valueLabel.text = NSUserDefaults.standardUserDefaults().objectForKey(keyTextfield.text) as String
}

当最后一个函数运行时,它抛出异常:'致命错误:无法解包Optional.None'。我认为,因为最后一行肯定会返回一个值,所以不需要选项,但显然我错了。 有人可以指出我做错了吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用

as? String

而不是

as String 

否则你会在nil值上崩溃。

答案 1 :(得分:0)

我会这样做:

if let valueText = NSUserDefaults.standardUserDefaults().objectForKey(keyTextfield.text) as? String{

    valueLabel.text = valueText
}else{
    //handle nil value
}

这不会崩溃,让你处理一个零值。