保存后不让我更改标签

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