Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 553 Vote(s) - 3.56 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Swift NSUserDefaults not saving Dictionary?

#1
I have the following test code:

func testSaveDictionary() {
let userDefaults = NSUserDefaults.standardUserDefaults()
var jo = [
"a" : "1.0",
"b" : "2.0"
]

let akey = "aKey"
userDefaults.setObject(jo, forKey: akey)
var isOk = userDefaults.synchronize()

var data0 = userDefaults.dictionaryForKey(akey)
println(data0)

}

The output of println(data0) is nil.

Anything wrong with my code? Is Swift Dictionary considered property list now or in the final release?
Reply

#2
Update for **Swift 2, Xcode 7:** As @atxe noticed, NSUserDefaults dictionaries are now mapped as `[String, AnyObject]`. This is a
consequence of the Objective-C "lightweight generics" which allow
to declare the Objective-C method as

- (NSDictionary<NSString *,id> *)dictionaryForKey:(NSString *)defaultName

(Default objects must be property lists and in particular the dictionary
keys can only be strings.)

On the other hand, a Swift dictionary is bridged automatically if possible, so the original code from the question works (again):

let jo = [
"a" : "1.0",
"b" : "2.0"
]

let akey = "aKey"
// Swift 2:
userDefaults.setObject(jo, forKey: akey)
// Swift 3:
userDefaults.set(jo, forKey: akey)

----------

Original answer for **Swift 1.2:**
The user defaults can store `NSDictionary` objects. These are mapped to Swift
as `[NSObject : AnyObject]`:

var jo : [NSObject : AnyObject] = [
"a" : "1.0",
"b" : "2.0"
]
userDefaults.setObject(jo, forKey: akey)
var isOk = userDefaults.synchronize()

And note that `dictionaryForKey()` returns an optional, so you should check it
for example with an optional assignment:

if let data0 = userDefaults.dictionaryForKey(akey) {
print(data0)
} else {
print("not set")
}

// Output: [b: 2.0, a: 1.0]
Reply

#3
**Follow this beautiful code below** -> Swift 3

public func setDict(dict: NSDictionary) {
let data = NSKeyedArchiver.archivedData(withRootObject: dict)
let userDefaults = UserDefaults.standard
userDefaults.set(data, forKey:"keyHere")
}


public func getDict() -> NSDictionary {
let data = UserDefaults.standard.object(forKey: "keyHere") as! NSData
let object = NSKeyedUnarchiver.unarchiveObject(with: data as Data) as! NSDictionary
return object;
}
Reply

#4
**//swift 4.0**

//for saving



let userDefaults = UserDefaults.standard
userDefaults.setValue(value, forKey: "Your_Key")
userDefaults.synchronize()


//for for retrieve

let loadedCart = UserDefaults.standard.dictionary(forKey: "Your_Key")
Reply

#5
I faced with this problem yesterday and filed a radar: [Cannot store Dictionary in NSUserDefaults in iOS8][1]. This issue is related only to iOS 8. Also I described a workaround for this case: [Workaround for saving dictionary in NSUserDefaults][2]. Works like a charm.


[1]:

[To see links please register here]

[2]:

[To see links please register here]



/// Save
NSUserDefaults.standardUserDefaults().setObject(NSKeyedArchiver.archivedDataWithRootObject(object), forKey: key)

/// Read
var data = NSUserDefaults.standardUserDefaults().objectForKey(key) as NSData
var object = NSKeyedUnarchiver.unarchiveObjectWithData(data) as [String: String]
Reply

#6
You need to convert it into `NSData` first. Something like this:

var data = NSKeyedArchiver.archivedDataWithRootObject(jo)
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(data, forKey:akey)
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through