有无法识别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 { ... }
如果编译器的错误信息更丰富的话,会更好!