Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法在自定义UserDefaults中保存结构-错误编码_Swift_Xcode_Swift4 - Fatal编程技术网

Swift 无法在自定义UserDefaults中保存结构-错误编码

Swift 无法在自定义UserDefaults中保存结构-错误编码,swift,xcode,swift4,Swift,Xcode,Swift4,填好表格后,我把所有的东西都输入字典。 如果我把这个注释掉,我的所有其他项目都可以保存下来,没有问题 其中之一是分类。我对它进行了编码,但不断得到错误 encodeWithCoder::无法识别的选择器发送到实例0x1c80bbe40' Category Items是Codeable的一个子类 储蓄 let playerDict : NSDictionary = [ "category" : CategoryItems(name: categoryData[0].name, image: c

填好表格后,我把所有的东西都输入字典。 如果我把这个注释掉,我的所有其他项目都可以保存下来,没有问题

其中之一是分类。我对它进行了编码,但不断得到错误

encodeWithCoder::无法识别的选择器发送到实例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
}

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

我建议完全放弃NSCoding,并在类中使用Codable。也许您可以放弃NSObject继承,甚至放弃类