Swift-NSCoding一个Set <enum>

时间:2018-10-10 12:46:32

标签: swift encoding enums set nscoding

我当前在自定义类上使用 NSCoding 尝试对两个Set <>对象进行编码和解码,但均未成功。

我的问题是,那些设置对象( baseSet extraSet )都是另一个对象的集合,分别是 baseEnum 和< strong> extraEnum 。

我尝试过:

public enum baseEnum: String {
  case X = "foo"
  case Y = "foos"
}
 (...)   

public class MyClass: NSObject, NSCoding {

   var baseSet = Set<baseEnum>()
   baseSet.insert(baseEnum.X)
    (...)

   public func encode(with aCoder: NSCoder) {
      aCoder.encode(baseSet, forKey: "baseSet")
      aCoder.encode(extraSet, forKey: "extraSet")
   }
}

编码本身失败,并引发错误:

  

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[_ SwiftValue   encodeWithCoder:]:无法识别的选择器已发送到实例0x109f959c0'   * 第一个调用堆栈:(0x18409ed8c 0x1832585ec 0x1840ac098 0x1840a45c8 0x183f8a41c 0x184a523cc 0x1849f8d0c 0x184a04ad4   0x184a523cc 0x10157704c 0x101577180 0x184a523cc 0x101486f08   0x101486f9c 0x184a523cc 0x10145f884 0x10145fc3c 0x184a523cc   0x184a0bad4 0x18697e350 0x1869b60b0 0x186b97548 0x186b98c80   0x186b8d0e4 0x1869f2000 0x186a74ba4 0x10442d19c 0x10443a9bc   0x186a74aa0 0x186b650cc 0x186aa68f8 0x186aa1fcc 0x186984704   0x186a81d80 0x186a7a758 0x186984130 0x1869a518c 0x101414cb8   0x101417abc 0x10147c2c4 0x1013ce2b0 0x1013ce2d4 0x10442d19c   0x10443f574 0x10147abf0 0x101516e00 0x101516edc 0x101635d40   0x1016520cc 0x101651968 0x101646eac 0x10163ba6c 0x101641750   0x10163fa04 0x10166106c 0x10166081c 0x10165ebf8 0x183fd7b34   0x183fe3554 0x183fd762c 0x18471172c 0x184716ee4 0x184712d58   0x18404d9f4 0x184047404 0x184046c2c 0x18404479c 0x183f64da8   0x185f4a020 0x18df84758 0x101516f5c 0x1839f5fc0)

0 个答案:

没有答案