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

storing [Int:String] dictionaries to user.defaults crashes with SIGABRT error

使用 user.default 保存了一堆数据。除了一本字典 [Int:String] 之外,一切都很好。有趣的是,我可以很好地保存字典 [String:Int],但是一旦它的 [Int:String],当我 运行 我的保存函数中有我的代码时它就会崩溃。

控制台显示如下:

*** 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'尝试插入非 属性 列表对象 { 99 = 詹妮弗; } 关键球员名字'

谢谢

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

A default object must be a property list—that is, an instance of (or for collections, a combination of instances of) NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any other type of object, you should typically archive it to create an instance of NSData. UserDefault Documentation

NSDictionary的key为字符串或符合NSCopying协议的类型。

你可以试试这个:

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