我正在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'。我认为,因为最后一行肯定会返回一个值,所以不需要选项,但显然我错了。 有人可以指出我做错了吗?
感谢您的帮助!
答案 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
}
这不会崩溃,让你处理一个零值。