将[Int:String]字典存储到user.defaults会因SIGABRT错误而崩溃

时间:2018-08-22 06:42:26

标签: swift dictionary nsuserdefaults userdefaults

使用user.default保存一堆数据。除了一个字典[Int:String],所有内容都可以保存。有趣的部分是,我可以很好地保存字典[String:Int],但是当它的[Int:String]运行运行包含代码的保存函数时,它就会崩溃。

控制台显示以下内容:

***由于未捕获的异常'NSInvalidArgumentException'终止了应用程序,原因:'试图插入非财产列表对象{     99 =詹妮弗; }作为关键玩家名称的

谢谢

1 个答案:

答案 0 :(得分:1)

您要保存在UserDefualt中的对象必须是NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary类型。根据苹果文档:

  

默认对象必须是属性列表,即(或   对于集合,是NSData,NSString,   NSNumber,NSDate,NSArray或NSDictionary。如果要存储任何   其他类型的对象,通常应将其归档以创建一个   NSData的实例。   UserDefault Documentation

NSDictionary的密钥是符合NSCopying协议的字符串或类型。 enter image description here

您可以尝试以下方法:

let yourData = NSKeyedArchiver.archivedDataWithRootObject(yourDictionary)
let userDefualts = UserDefaults.standard
userDefualts.set(yourData, forKey: "yourKey")