Coder
Coder

Reputation: 529

NSUserDefaults Errors under Swift version 2.0

I'm having some issues implementing the NSUserDefaults in Swift version 2.0. My code work fine for Swift v1, but having some issue with v2. First, the data isn't save once I press the save button and two, my app crashes once I press on the save button. Can anybody tell me what I'm doing wrong with my coding?

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()

        }   
    }

Upvotes: 0

Views: 82

Answers (2)

Shen
Shen

Reputation: 644

I see your UITextfield problem was solved. Now try this to help you get at the information retained from your viewDidLoad function:

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
    }
}

Put it into viewWillAppear() if you want it called after everytime you move back to your controller.

Upvotes: 1

Pradeep K
Pradeep K

Reputation: 3661

You are trying to save the text fields instead of its text value. You should save its text value

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

Upvotes: 0

Related Questions