【问题标题】:Can't save struct in custom UserDefaults - Error encode无法在自定义 UserDefaults 中保存结构 - 错误编码
【发布时间】:2018-09-01 16:03:18
【问题描述】:

填写表格后,我在 NSDictionary 中输入所有内容。 如果我将其注释掉,我的所有其他项目都可以保存。

其中一个是类别。我对其进行了编码,但不断收到错误

encodeWithCoder:]: unrecognized selector sent to instance 0x1c80bbe40'

Category Items 是 Codeable 的子类。

正在保存。

let playerDict : NSDictionary = [
  "category" : CategoryItems(name: categoryData[0].name, image: categoryData[0].image, type: categoryData[0].type),
]


   class PlayerModel: NSObject, NSCoding {

   var category: CategoryItems?

   init(json: NSDictionary) {
     if let category = json["category"] as? CategoryItems {
            self.category = category
     }
  }
}



required init?(coder aDecoder: NSCoder) {
  if let category = aDecoder.decodeObject(forKey: "category") as? CategoryItems {
            self.category = category
        }
}

func encode(with aCoder: NSCoder) {
  if let category = self.category {
            aCoder.encode(category, forKey: "category")
        }
}

型号:

struct CategoryItems: Codable {
    var name : String
    var image : String
    var type : playerType
}

【问题讨论】:

    标签: swift xcode swift4


    【解决方案1】:

    主要问题是您不能将NSCoding 与结构一起使用。采用NSCoding 的对象必须是NSObject 的子

    我建议完全放弃NSCoding 并在课程中也使用Codable。也许你可以辞去NSObject 的继承,甚至是一个类。

    【讨论】:

      猜你喜欢
      • 2017-11-12
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      相关资源
      最近更新 更多