【问题标题】:How to store NSArray in Userdefaults?如何将 NSArray 存储在 Userdefaults 中?
【发布时间】:2018-06-11 09:37:09
【问题描述】:

这是我的代码

var defaultValues = UserDefaults.standard
var json = NSArray()
self.defaultValues.set(json, forKey: "BedData")

我使用这段代码来存储字符串,它工作得很好,但是当我尝试存储 NSArray 时,它给了我这个错误“尝试插入非属性列表对象”

【问题讨论】:

  • 首先不要在 Swift 中使用NSArray。它缺少类型信息。数组的内容必须符合属性列表,例如[String]() 将起作用。

标签: json swift userdefaults


【解决方案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)
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多