如何将 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 [关闭]

读取和存储多个 NSArray

如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 didSelectRowAtIndexPath 中的 NSArray:方法

如何判断解析用户是否在启动屏幕中登录

如何将 NSArray 值设置为 UILabel