NSUserDefaults Swift 2.0上的错误

时间:2016-03-02 15:48:34

标签: swift nsuserdefaults

由于某些原因,我似乎无法让我的NSUserDefaults在Swift 2.0下正常工作。它在旧版本下工作正常,但在Swift 2.0下,它不起作用。我知道Swift 2.0的编码已被更改,但出于某种原因,一旦我离开该页面,表格视图中填写的所有信息都会消失。有什么建议吗?

import UIKit

class MainTableViewController: UITableViewController, UITextFieldDelegate {

    @IBOutlet weak var name: UITextField!

    @IBAction func btnSave() {

            let userDefaults = NSUserDefaults.standardUserDefaults()

            if name.text == "" {


                let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)

                alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

                self.presentViewController(alert, animated: true, completion: nil)

                let userDefaults = NSUserDefaults.standardUserDefaults()

                NSUserDefaults.standardUserDefaults().setObject(name, forKey:"name")

                userDefaults.synchronize()

        }

        override func viewDidLoad() {

            let defaults = NSUserDefaults.standardUserDefaults()

            defaults.setObject(" ", forKey: "name")

            super.viewDidLoad()

               }
        }

2 个答案:

答案 0 :(得分:1)

也许试试这个

import UIKit

class MainTableViewController: UITableViewController, UITextFieldDelegate {

  let userDefaults = NSUserDefaults.standardUserDefaults()

  @IBOutlet weak var name: UITextField!

  @IBAction func btnSave() {


    if name.text == "" {

      let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)

      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

      self.presentViewController(alert, animated: true, completion: nil)

    } else {

      userDefaults.setObject(name.text, forKey:"name")

      userDefaults.synchronize()
    }
  }

  override func viewDidLoad() {

    super.viewDidLoad()

  }

  override func viewDidAppear(animated: Bool) {

    name.text = userDefaults.stringForKey("name")

  }
}

答案 1 :(得分:0)

viewDidLoad中,您要删除名称中的信息,因此每次您输入视图时,都会被删除。

override func viewDidLoad() {
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(" ", forKey: "name")
    super.viewDidLoad()
}

此外,由于name是UITextField而不是字符串,因此当您保存名称时,应该这样做:

NSUserDefaults.standardUserDefaults().setObject(name.text, forKey:"name")

而不是:

NSUserDefaults.standardUserDefaults().setObject(name, forKey:"name")

此外,在btnSave()方法中,您只保存name.text,如果它等于""。因此,如果您输入任何其他信息,它将无法保存。我建议您修改它,使其看起来像这样(您也可以使用guard代替if name.text):

@IBAction func btnSave() {
    if name.text == "" {
        let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
        self.presentViewController(alert, animated: true, completion: nil)
        return
    }

    let userDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(name.text, forKey:"name")
    userDefaults.synchronize()
}

P.S:请记住,NSUserDefaults适用于用户首选项。我建议不要将大量数据保存到NSUserDefaults中。