我保存后不会让我更改标签

时间:2016-01-22 00:25:06

标签: ios xcode swift uilabel nsuserdefaults

我正在创建自己的应用程序并保存标签并通过单击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)
}

3 个答案:

答案 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

相关问题