Reputation: 529
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
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
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