Got Unrecognized selector -replacementObjectForKeyedArchiver: Crash while implementing NSCoding in Swift

I created a Swift class that conforms to 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") } } 

But when I call ...

let data = NSKeyedArchiver.archivedDataWithRootObject(cmd);

It gives an error message.

 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:] 

What should I do?

+53
ios swift xcode6 nscoding
Sep 12 '14 at 9:56 on
source share
1 answer

Although the Swift class works without declaring a superclass. You must declare the superclass as NSObject to make NSCoding work!

So, just add the superclass of the NSObject class to the class declaration.

 class Command: NSObject, NSCoding { ... } 

It would be much nicer if the compiler error was more informative!

+153
Sep 12 '14 at 9:57 on
source share



All Articles