将 [Int:String] 字典存储到 user.defaults 会因 SIGABRT 错误而崩溃
Posted
技术标签:
【中文标题】将 [Int:String] 字典存储到 user.defaults 会因 SIGABRT 错误而崩溃【英文标题】:storing [Int:String] dictionaries to user.defaults crashes with SIGABRT error 【发布时间】:2018-08-22 06:42:26 【问题描述】:使用 user.default 保存一堆数据。除了一本字典 [Int:String] 之外,一切都很好。有趣的是,我可以很好地保存字典 [String:Int],但是一旦它的 [Int:String],当我运行包含我的代码的保存函数时它就会崩溃。
控制台显示如下:
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试插入非属性列表对象 99 = 詹妮弗; 代表关键球员的名字
谢谢
【问题讨论】:
【参考方案1】:您尝试保存在 UserDefualt 中的对象必须是 NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary 类型。根据苹果文档:
默认对象必须是一个属性列表,即(或 对于集合,NSData、NSString 的实例的组合, NSNumber、NSDate、NSArray 或 NSDictionary。如果你想存储任何 其他类型的对象,您通常应该将其归档以创建一个 NSData 的实例。 UserDefault Documentation
NSDictionary 的key 是一个字符串或者一个符合NSCopying 协议的类型。
你可以试试这个:
let yourData = NSKeyedArchiver.archivedDataWithRootObject(yourDictionary)
let userDefualts = UserDefaults.standard
userDefualts.set(yourData, forKey: "yourKey")
【讨论】:
欣赏,非常感谢。完美地工作。对于那些看到这一点的人,要取消归档你已经取得的成果,请使用以下 swift 4: NSKeyedUnarchiver.unarchiveObject(with: Data)以上是关于将 [Int:String] 字典存储到 user.defaults 会因 SIGABRT 错误而崩溃的主要内容,如果未能解决你的问题,请参考以下文章
2021-11-24 WinFrom面试题 如何将Dictionary<int,string>中存储的信息绑定到ListBox中?