将NSDictionary设置为UserDefaults时出现异常

时间:2017-06-07 14:17:56

标签: swift nsuserdefaults

如何修复异常:

[User Defaults] Attempt to set a non-property-list object {
4 = 5;
} as an NSUserDefaults/CFPreferences value for key MyKey
通过执行以下代码(Swift 3)抛出

let ns = NSDictionary(dictionary: [4: 5])
UserDefaults.standard.set(ns, forKey: "MyKey")

上面的代码正确保存String类型,但NSDictionary

有问题

2 个答案:

答案 0 :(得分:4)

所有属性列表键都必须为String

来自documentation

  

虽然NSDictionaryCFDictionary对象允许它们的键是任何类型的对象,但如果键不是字符串对象,则集合不是属性列表对象

let ns = ["4": 5]
UserDefaults.standard.set(ns, forKey: "MyKey")

无需使用NSDictionary,Swift Dictionary的工作方式相同,并且是隐式桥接的。

答案 1 :(得分:2)

您的词典必须有字符串作为键才能将其保存到UserDefaults

这对我有用:

let ns = NSDictionary(dictionary: ["4": 5])
UserDefaults.standard.set(ns, forKey: "MyKey")