Got Unrecognized selector-replacementObjectForKeyedArchiver: сбой при реализации NSCoding в Swift



Я создал Swift класс, который соответствует NSCoding. (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:]


Что делать?

531   1  

1 ответ:

хотя Swift класс работает без наследования, но для того, чтобы использовать NSCoding вы должны наследовать от NSObject.

class Command: NSObject, NSCoding {
    ...
}

жаль, что ошибка компилятора не очень информативна : (

Comments

    Ничего не найдено.