在 Swift 中实现 NSCoding 时崩溃

我创建了一个符合 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:]

我该怎么办?

20721 次浏览

虽然 Swift 类没有继承,但是为了使用 NSCoding,必须使用 NSObject继承

class Command: NSObject, NSCoding {
...
}

遗憾的是,编译器错误没有提供很多信息: (