【问题标题】:How referencing instance method 'encode' on 'Array' can conform to 'Encodable'在“Array”上引用实例方法“encode”如何符合“Encodable”
【发布时间】:2020-03-29 14:23:25
【问题描述】:

我拥有名为“Lekarstvo”的 CoreData 实体。该实体的结构与 JSON 的结构相同。我想将此信息传输到 JSON 文件。我该怎么做?现在我遇到了这个错误,我真的不知道如何解决它。

在“Array”上引用实例方法“encode”要求“Lekarstvo”符合“Encodable”

func getAllData() {

     var userArr :[Lekarstvo] = []

      do{
               userArr =  try moc.fetch(Lekarstvo.fetchRequest())

      }catch{
              print(error)
      }

        guard let encoded = try? JSONEncoder().encode(userArr) else {return}
            if let jsonString = String(data: encoded, encoding: .utf8) {
                print(jsonString)
            }

            guard let url = URL(string: "https://api.myjson.com/bins/vw7sg") else {return}
                        var request = URLRequest(url: url)
                            request.addValue("application/json", forHTTPHeaderField: "Content-Type")

                            request.httpMethod = "PUT"
                            request.httpBody = encoded

【问题讨论】:

  • 解决方案在这里:"在 'Array' 上引用实例方法 'encode' 要求 'Lekarstvo' 符合 'Encodable'"。那就是你需要让你的类符合协议。
  • 你能帮帮我吗?

标签: json swift core-data


【解决方案1】:

确保您的结构/类符合 Codable(或 Encodable)+ 它的所有子字段都需要符合相同的协议。

struct Lekarstvo: Codable {
...
}

【讨论】:

    【解决方案2】:

    我通过添加这个 for 循环解决了我的问题,它现在可以工作了。

      for data in userArr as! [NSManagedObject] {
            let dossi = LecarstvO(id: data.value(forKey: "id") as! Int,
                                  kgPazient: data.value(forKey: "kgPazient") as! Int,
                                  goPazient: data.value(forKey: "goPazient") as! Int,
                                  fromMin: data.value(forKey: "fromMin") as! CGFloat,
                                  toMin: data.value(forKey: "toMin") as! CGFloat,
                                  fromMax: data.value(forKey: "fromMax") as! CGFloat,
                                  toMax: data.value(forKey: "toMax") as! CGFloat,
                                  isMin: data.value(forKey: "isMin") as! Bool,
                                  isMax: data.value(forKey: "isMax") as! Bool,
                                  mjarka: data.value(forKey: "mjarka") as! String,
                                  maxDoza: data.value(forKey: "maxDoza") as! CGFloat,
                                  firstDoza: data.value(forKey: "firstDoza") as! CGFloat,
                                  priemI: data.value(forKey: "priemI") as! Int,
                                  priemII: data.value(forKey: "priemII") as! Int,
                                  opis: data.value(forKey: "opis") as! String,
                                  lekarstvo: data.value(forKey: "lekarstvo") as! String,
                                  grupa: data.value(forKey: "grupa") as! String)
                         self.model.database.append(dossi)
        }
    

    【讨论】:

    • 这和json编码有什么关系?
    【解决方案3】:

    对于 userArr 中的数据为! [NSManagedObject]

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2011-10-21
      • 2019-02-20
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多