如何将 NSArray 存储在 Userdefaults 中?
Posted
技术标签:
【中文标题】如何将 NSArray 存储在 Userdefaults 中?【英文标题】:How to store NSArray in Userdefaults? 【发布时间】:2018-06-11 09:37:09 【问题描述】:这是我的代码
var defaultValues = UserDefaults.standard
var json = NSArray()
self.defaultValues.set(json, forKey: "BedData")
我使用这段代码来存储字符串,它工作得很好,但是当我尝试存储 NSArray 时,它给了我这个错误“尝试插入非属性列表对象”
【问题讨论】:
Saving array with UserDefaults的可能重复 首先不要在 Swift 中使用NSArray
。它缺少类型信息。数组的内容必须符合属性列表,例如[String]()
将起作用。
【参考方案1】:
您必须编码和解码才能在 UserDefault 中添加和检索数据。
func getUserDetail() -> UserDetail?
if let decodedData = UserDefaults.standard.object(forKey: AppConstant.userDefaultKey.user_detail) as? Data
return try! PropertyListDecoder().decode(UserDetail.self, from: decodedData)
return nil
func setUserDetail(user: UserDetail)
UserDefaults.standard.set(try! PropertyListEncoder().encode(user), forKey: AppConstant.userDefaultKey.user_detail)
【讨论】:
【参考方案2】:谢谢大家的回复,但是我找到了解决办法
Let json = NSArray()
存储
let data = NSKeyedArchiver.archivedData(withRootObject: json)
self.defaultValues.set(data, forKey: "Offline-BedData")
然后检索:
if let data = self.defaultValues.object(forKey: "Offline-BedData")! as? Data
if let dict = NSKeyedUnarchiver.unarchiveObject(with: data) as? NSArray
json = dict
print("json\(json)")
self.performSegue(withIdentifier: "BedShow", sender: Any?.self)
【讨论】:
以上是关于如何将 NSArray 存储在 Userdefaults 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Photo Framework 将 iPhone 中存储的所有照片发送到 NSArray?
如何在 NSMutableArray 中选择特定索引并存储在 nsarray [关闭]
如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 didSelectRowAtIndexPath 中的 NSArray:方法