【问题标题】:Save selected items in array of objects to UserDefaults in swift 4在swift 4中将对象数组中的选定项目保存到UserDefaults
【发布时间】:2019-03-16 07:15:14
【问题描述】:

我已经将我的 Json 解码为结构,现在我有一个对象数组,每个对象都有一些值,所以当用户在集合中选择项目时我想要查看数组中的选定对象附加到 UserDefaults 中的对象数组我读过类似的问题所以我在下面使用了这个函数但是它不起作用

@objc func likeOrDislike (_ sender : UIButton!) {
    let arrays = UserDefaults.standard.value(forKey: "Liked") as? [ListsModel.ResultValue]
    print(arrays as Any)
    var items = arrays
    let item = self.adv.resultValue[sender.tag]
    if arrays != nil {
        if items!.contains(where: {($0.id == item.id)}) {
            items!.filter({($0.id == item.id)})
        } else {
            items!.append(item)
        }
    } else {
       items = [item]
    }
    UserDefaults.standard.setValue(items, forKey: "Liked")
    UserDefaults.standard.synchronize()
}

这是我用于解码的模型

public class ListsModel {
  struct Response : Decodable {
    var resultValue : [ResultValue]
  }

  struct ResultValue : Decodable {
    let id : String?
    let title : String?
    let user_id : String?
    let username : String?
    let user_image : String?
    let release_date : String?
    let start_date : String?
    let salary : String?
    let salary_id : String?
    let work_field_id : String?
    let adv_type_id : String?
    let work_field : String?
    let description : String?
    let adv_base_id : String?
    let is_spec : String?
    let status : String?
    let p_expire_date : String?
  }
}

【问题讨论】:

  • 简单答案:不要将其存储到 UserDefaults。而是使用 FileManager 或某种数据库

标签: ios swift nsuserdefaults arrayobject


【解决方案1】:

通过stringify将所有模型对象转换为字符串,然后存储到用户默认并在你想使用的地方使用。

【讨论】:

  • 是的,这是某种方式,但我想存储所有这些
  • 您可以添加所有您需要的对象,以便从模型中获取对象或对象数组。首先创建模型,然后在完成后将数据存储到模型中,将所有模型数据转换为 stringfy 并存储到您的 userdefault
  • 不,您不应该将自定义模型保存到UserDefaults。您应该使用FileManager 或数据库
  • 像这样我使用对象映射器自定义模型类,然后转换为 jsonstring 并存储到 userdefault 中。 //1.自定义模型 if let userInfo = Mapper().map(JSONObject: dictionary["login"] ){ if let JSONString = Mapper().toJSONString(userInfo, prettyPrint: true) { //2 用户信息:- let编码数据:数据 = NSKeyedArchiver.archivedData(withRootObject: JSONString) UserDefaults.standard.set(encodedData, forKey: "userinfo") } }
猜你喜欢
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 2018-05-30
  • 1970-01-01
相关资源
最近更新 更多