I am using the following code to save an object to UserDefaults (previously NSUserDefaults) using xcode 8:
let defaults = UserDefaults.standard()
defaults.set(someObject, forKey: "someObject")
print(defaults.object(forKey: "someObject"))
someObject is a dictionary and I am running on the simulator.
For some reason this is not saving the value and 'nil' is printed. Wondering if it's a simulator problem.
For Swift 3
UserDefaults.standard.setValue(token, forKey: "user_auth_token")
print("\(UserDefaults.standard.value(forKey: "user_auth_token")!)")
Working perfectly here with this..!
let dict:[String:String] = ["key":"Hello"]
UserDefaults.standard.set(dict, forKey: "dict")
let result = UserDefaults.standard.value(forKey: "dict")
print(result!)
// Output -> { key:hello;}
This is the undocumented-but-known issue that NSUserDefaults/UserDefualts does not work in the iOS 10 simulator if the iOS 8/9 simulator has been previously run.
Rebooting your Mac and going straight to XCode 8, iOS 10 simulator will fix this issue.
See also: Why won't my app run in XCode 8 beta (8S128d)
This problem seems to be caused by having two versions of xcode/simulator installed.
What worked for me was uninstalling xcode 7 and just keeping xcode 8 beta on my system. Emptying trash, resetting the simulator and running. I also restarted my computer.
After following these steps the simulator is able to save to UserDefaults.
Swift 4:-
let defaults = UserDefaults.standard
let dictionary: [String:String] = ["key":"Value"] //Dictionary which you want to save
defaults.setValue(dictionary, forKey: "DictValue") //Saved the Dictionary in user default
let dictValue = defaults.value(forKey: "DictValue") //Retrieving the value from user default
print(dictValue) // Printing the value