Swift 2.0 版下的 NSUserDefaults 错误

NSUserDefaults Errors under Swift version 2.0

我在 Swift 2.0 版中实现 NSUserDefaults 时遇到一些问题。我的代码在 Swift v1 上运行良好,但在 v2 上有一些问题。首先,一旦我按下保存按钮,数据就不会保存;第二,一旦我按下保存按钮,我的应用程序就会崩溃。谁能告诉我我的编码做错了什么?

import UIKit

    class MainTableViewController: UITableViewController, UITextFieldDelegate {

    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var phone: UITextField!  
    @IBOutlet weak var email: 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 if phone.text == " " {
                    let alert = UIAlertController(title: "Data", message: "Missing Phone Number.", preferredStyle: UIAlertControllerStyle.Alert)
                    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
                    self.presentViewController(alert, animated: true, completion: nil)
                    return
            }

            else if email.text == " " {
                let alert = UIAlertController(title: "Data", message: "Missing Email Address.", 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, forKey:"name")
            userDefaults.setObject(phone, forKey:"phone")
            userDefaults.setObject(email, forKey:"email")

            userDefaults.synchronize()
        }

        override func viewDidLoad() {

            let userDefaults = NSUserDefaults.standardUserDefaults()

            userDefaults.setObject(" ", forKey: "name")
            userDefaults.setObject(" ", forKey: "phone")
            userDefaults.setObject(" ", forKey: "email")

            super.viewDidLoad()

        }   
    }

您正在尝试保存文本字段而不是其文本值。你应该保存它的文本值

userDefaults.setObject(name.text ?? " ", forKey:"name") userDefaults.setObject(phone.text ?? " " , forKey:"phone") userDefaults.setObject(email.text ?? " ", forKey:"email")

我看到你的 UITextfield 问题已经解决了。现在试试这个来帮助您获取从 viewDidLoad 函数中保留的信息:

override func viewDidLoad() {
    super.viewDidLoad()

    let userDefaults = NSUserDefaults.standardUserDefaults()

    if let nameSaved = userDefaults.objectForKey("name") as? String {
        name.text = nameSaved
    }

    if let phoneSaved = userDefaults.objectForKey("phone") as? String {
        phone.text = phoneSaved
    }

    if let emailSaved = userDefaults.objectForKey("email") as? String {
        email.text = emailSaved
    }
}

如果您希望在每次返回控制器后调用它,请将其放入 viewWillAppear()。