Hey everyone!
I'm currently having an issue when reading a string value from NSUserDefaults in Swift for iOS.
I am using NSUserDefaults.standardUserDefaults() in order to store string data within the application by using a set of predefined keys. I know the predefined keys work due to other methods functioning correctly, but for whatever reason the value of these keys always returns as "" or nil.
Each text field saves its values when they are dismissed, but I can't seem to figure out what has gone wrong.
I feel as though the data should be saved properly after hitting the return button or touching on the view.
If you have any idea as to what I've done wrong I'd be so happy to hear what I can do to fix it!
Here is my code:
@IBOutlet weak var hotelNameField: UITextField!
@IBOutlet weak var roomNumField: UITextField!
@IBOutlet weak var hotelLbl: UILabel!
@IBOutlet weak var roomLbl: UILabel!
private var defaultKeys: DefaultKeys = DefaultKeys()
private var isEditingDate : Bool = Bool()
func handleUIForPages(var indexUsed: Int)
{
if(indexUsed == 0)
{
//This doesn't matter for this issue.
}
else if(indexUsed == 1)
{
handlePageTwo()
hotelLbl.text = "Hotel Name:"
roomLbl.text = "Room Number:"
datePickerField.hidden = true
datePickerLbl.hidden = true
date2PickerField.hidden = true
date2PickerLbl.hidden = true
hotelNameField.hidden = false
roomNumField.hidden = false
hotelLbl.hidden = false
roomLbl.hidden = false
weatherNotificationsLbl.hidden = true
weatherNotificationsSwitch.hidden = true
welcomeMessageLbl.hidden = true
welcomeMessageSwitch.hidden = true
finishedLbl.hidden = true
getStartedButton.hidden = true
setupImageView.hidden = false
setupImageView.image = UIImage(named: "LocationIcon")
}
else if (indexUsed == 2)
{
//This doesn't matter for this issue.
}
else if (indexUsed == 3)
{
//This doesn't matter for this issue.
}
else
{
println("Beyond normal index!")
}
}
func handlePageTwo()
{
var defaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
var hotelName = defaults.valueForKey(defaultKeys.key5) as! String?
var roomNumber = defaults.valueForKey(defaultKeys.key6) as! String?
if(hotelName != "")
{
hotelNameField.text = hotelName
}
else
{
println("Hotel Name hasn't been entered")
}
if(roomNumber != "")
{
roomNumField.text = roomNumber
}
else
{
println("Room Number hasn't been entered")
}
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var hotelData = hotelNameField.text
var roomData = roomNumField.text
defaults.setValue(hotelData, forKey: defaultKeys.key5)
defaults.setValue(roomData, forKey: defaultKeys.key6)
textField.resignFirstResponder()
return true
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if(isEditingDate == false)
{
println("Editing is false")
var hotelData = hotelNameField.text
var roomData = roomNumField.text
defaults.setValue(hotelData, forKey: defaultKeys.key5)
defaults.setValue(roomData, forKey: defaultKeys.key6)
self.view.endEditing(true)
}
}
func handleRoomFieldDelegates()
{
hotelNameField.delegate = self
roomNumField.delegate = self
}
Thanks!
🙂