我正在创建自己的应用程序并保存标签并通过单击player1按钮保存它然后我在视图中将其恢复加载。问题是,在我收回它后,它不会让我再次更改它,当我尝试单击goalUp按钮时,它会出现错误:"第1行:EXC_BAD_INSTRUCTION"。它在viewDidLoad下的第一行显示此错误。请帮忙!
@IBOutlet var goal: UILabel!
@IBAction func player1button(sender: AnyObject) {
NSUserDefaults().setValue(goal.text!, forKey:"firstGoal")
}
var goal1 = 0
@IBAction func goalUp(sender: AnyObject) {
goal1++
goal.text = "\(goal1)"
}
override func viewDidLoad() {
super.viewDidLoad()
goal1 = Int((NSUserDefaults().objectForKey("firstGoal") as? String)!)!
goal.text = (NSUserDefaults().objectForKey("firstGoal") as? String)
}
答案 0 :(得分:0)
在setObject
方法中尝试setValue
而不是player1button
:
NSUserDefaults.standardUserDefaults().setObject(goal.text!, forKey:"firstGoal")
<强> UPD 强>
将数据写入NSUserDefaults并不总是立竿见影。请立即致电synchronize
立即保存。
NSUserDefaults.standardUserDefaults().setObject(goal.text!, forKey:"firstGoal")
NSUserDefaults.standardUserDefaults().synchronize()
答案 1 :(得分:0)
super.viewDidLoad()
你主要super
?也许你应该检查一下onCreate()
。
答案 2 :(得分:0)
这可能与您传递goal1
的方式有关,有时与Int
有关,有时与String
有关。选择一个,然后就这样做。我认为将其作为Int
使用会更容易(请确保将其另存为Int
)。只要您想将Int
转换为String
,就可以使用String(intValue)
。
var goal1String = ""
// var goal1 = 0
override func viewDidLoad() {
super.viewDidLoad()
// goal1 = Int((NSUserDefaults().objectForKey("firstGoal") as? String)!)!
goal1String = String(NSUserDefaults().objectForKey("firstGoal"))
print(goal1String)
goal.text = (NSUserDefaults().objectForKey("firstGoal") as? String)
}
@IBOutlet var goal: UILabel!
@IBAction func player1button(sender: AnyObject) {
NSUserDefaults().setValue(goal.text!, forKey:"firstGoal")
}
@IBAction func goalUp(sender: AnyObject) {
goal1++
goal.text = "\(goal1)"
}
将goal1设为String
而不是Int