保存后不让我更改标签
Wont let me change label after I save it
我正在制作我自己的应用程序,我保存了一个标签并通过单击播放器 1 按钮保存了它,然后我将它取回了已加载的视图中。问题是,在我取回它之后,它不会让我再次更改它,当我尝试单击 goalUp 按钮时,它出现了错误:"thread 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)
}
尝试 setObject
而不是 player1button
方法中的 setValue
:
NSUserDefaults.standardUserDefaults().setObject(goal.text!, forKey:"firstGoal")
UPD
将数据写入 NSUserDefaults 并不总是即时的。立即致电 synchronize
立即保存。
NSUserDefaults.standardUserDefaults().setObject(goal.text!, forKey:"firstGoal")
NSUserDefaults.standardUserDefaults().synchronize()
It says this error on the first line under viewDidLoad.
你主要super.viewDidLoad()
吗?也许你应该检查你的 super
.
这可能与您传递 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)"
}
将目标 1 设置为 String
而不是 Int
我正在制作我自己的应用程序,我保存了一个标签并通过单击播放器 1 按钮保存了它,然后我将它取回了已加载的视图中。问题是,在我取回它之后,它不会让我再次更改它,当我尝试单击 goalUp 按钮时,它出现了错误:"thread 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)
}
尝试 setObject
而不是 player1button
方法中的 setValue
:
NSUserDefaults.standardUserDefaults().setObject(goal.text!, forKey:"firstGoal")
UPD
将数据写入 NSUserDefaults 并不总是即时的。立即致电 synchronize
立即保存。
NSUserDefaults.standardUserDefaults().setObject(goal.text!, forKey:"firstGoal")
NSUserDefaults.standardUserDefaults().synchronize()
It says this error on the first line under viewDidLoad.
你主要super.viewDidLoad()
吗?也许你应该检查你的 super
.
这可能与您传递 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)"
}
将目标 1 设置为 String
而不是 Int