用Swift编码

用Swift编码,swift,ios8,xcode6,Swift,Ios8,Xcode6,我在解码我的类时遇到了一个很大的问题。 代码如下: required init(coder aDecoder: NSCoder) { self.statistics = aDecoder.decodeObjectForKey("playerStatistics") as [Team:[Competition:Statistics]] } 团队、竞争和统计都是类,但在编码时,我总是会遇到一个错误:“使用NSException类型的未捕获异常终止”“由于未捕获异常“NSInvalidArg

我在解码我的类时遇到了一个很大的问题。 代码如下:

required init(coder aDecoder: NSCoder) {
    self.statistics = aDecoder.decodeObjectForKey("playerStatistics") as [Team:[Competition:Statistics]]
}
团队、竞争和统计都是类,但在编码时,我总是会遇到一个错误:“使用NSException类型的未捕获异常终止”
“由于未捕获异常“NSInvalidArgumentException”终止应用程序,原因:“-[Statistics.Team copyWithZone::未识别的选择器发送到实例0x16665ed0”
。可能出现的错误有哪些?该错误是否会由于字典中的某个类而发生?初始化对象时,仅设置字典的值:

self.statistics[Team(name: "<default>"] = [Competition:Statistics]()
self.statistics[团队(名称):]=[竞争:统计]()

任何帮助都会很好!

您的错误告诉您
Team
必须符合
NSCopying
。我怀疑非归档/解码过程正在内部使用
NSDictionary
,并且
NSDictionary
要求密钥符合
NSCopying
。如果
Team
类符合
NSCopying
(即执行
copyWithZone
方法),此错误消失


顺便说一句,因为
团队
是一个字典键,我假设您也使它符合
哈希
(和
相等
)的要求。这是Swift字典键的要求。

团队、竞赛和统计类是否有init(编码器)为它们定义?好吧,NSCoder只能自己处理系统定义的类型,因此有必要为所有依赖类定义解码器/编码器。是的,所有这些类都实现了NSCoding协议以及NSObject类。也许我应该提到,只有在正在初始化该对象。但无论如何,它也可能有其他原因。我复制了我的问题@insane-36
self.statistics[团队(名称):][竞赛:统计]()
这是无效的Swift,因此它不可能是您真正说的。哦,很抱歉我忘记关闭括号。实际上上面的代码不是真正的代码,因为我有一个更复杂的团队,之前已经初始化过,但是提到这一点会很复杂。非常感谢您提供的这些信息,我不再得到错误t我不知道要写入什么
copyWithZone()
-我在使用时出错:
返回self.copy()as Team
顺便说一下,我在运行时遇到的错误是:
EXC\u BAD\u ACCESS
您可以
返回Team(name:name)
非常感谢您提供了这些非常有用的信息!