嗨,我正在尝试在Userdefaults中保存数据,但每当我运行应用程序的这个页面时,我都会收到第1个线程:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOC),如图所示。
在此之前,我在我现在正在获取它的那一行下面的线上得到了同样的错误,但是现在它正在图像中看到的当前行。如何在每次应用启动时保存我的数据?
var highScore = 0
var bronzeStatus = 0
viewDidLoad中:
let defaults = UserDefaults.standard
highScore = defaults.value(forKey: "Add1High") as! NSInteger!
bronzeStatus = defaults.value(forKey: "bronzeMed") as! NSInteger!
下边:
if correctNumber > highScore {
highScore = correctNumber
let defaults = UserDefaults.standard
defaults.setValue(highScore, forKey: "Add1High")
defaults.synchronize()
}
if highScore >= 15 {
let defaults = UserDefaults.standard
let bronzeAlert = UIAlertController(title: "New Medal!", message: "You earned a bronze medal!", preferredStyle: UIAlertControllerStyle.alert)
bronzeAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(scoreAlert, animated: true, completion: nil)
bronzeStatus = 1
defaults.setValue(bronzeStatus, forKey: "bronzeMed")
defaults.synchronize()
}
答案 0 :(得分:2)
尝试使用
highScore = defaults.integer(forKey: "Add1High")
它将返回的值转换为NSInteger。如果值是NSNumber,则返回-integerValue的结果。如果值是NSString,则尽可能将其转换为NSInteger。如果该值不存在或无法转换为整数,则返回0。所以不需要转换你的部分。
同时设置使用
defaults.set(highScore, forKey: "Add1High")
答案 1 :(得分:0)
Swift 3.0代码
此代码工作完美..
var highScore = 0
var bronzeStatus = 0
viewDidLoad中:
//set integer type data
UserDefaults.standard.set(20, forKey: "Add1High")
UserDefaults.standard.set(30, forKey: "bronzeMed")
//Get integer type data
let defaults = UserDefaults.standard
highScore = defaults.integer(forKey: "Add1High")
bronzeStatus = defaults.integer(forKey: "bronzeMed")
print("\(highScore)\(bronzeStatus)") //2030
答案 2 :(得分:0)
使用它来检查你的用户默认值是否退出
let defaults = UserDefaults.standard
if defaults.value(forKey: "Add1High") != nil{
highScore = defaults.value(forKey: "Add1High") as! NSInteger!
}
if defaults.value(forKey: "bronzeStatus") != nil{
bronzeStatus = defaults.value(forKey: "bronzeStatus") as! NSInteger!
}
因为你有条件
如果correctNumber>高分{}
所以这部分可能会执行,也可能不会执行,因此您必须检查