有无法识别selector -replacementObjectForKeyedArchiver:在Swift中实现NSCoding时崩溃

我创build了一个符合NSCoding的Swift类。 (Xcode 6 GM,Swift 1.0)

import Foundation private var nextNonce = 1000 class Command: NSCoding { let nonce: Int let string: String! init(string: String) { self.nonce = nextNonce++ self.string = string } required init(coder aDecoder: NSCoder) { nonce = aDecoder.decodeIntegerForKey("nonce") string = aDecoder.decodeObjectForKey("string") as String } func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeInteger(nonce, forKey: "nonce") aCoder.encodeObject(string, forKey: "string") } } 

但是当我打电话…

let data = NSKeyedArchiver.archivedDataWithRootObject(cmd);

它崩溃给我这个错误。

 2014-09-12 16:30:00.463 MyApp[30078:60b] *** NSForwarding: warning: object 0x7a04ac70 of class '_TtC8MyApp7Command' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[MyApp.Command replacementObjectForKeyedArchiver:] 

我该怎么办?

虽然Swift类没有超类声明。 你必须声明超类作为NSObject为了使NSCoding工作!

所以,只需将NSObject超类添加到类声明中即可。

 class Command: NSObject, NSCoding { ... } 

如果编译器的错误信息更丰富的话,会更好!