Ios 无法识别选择器-ReplacementObjectForkeyDarchiver:在Swift中实现NSCoding时崩溃
我创建了一个符合NSCoding的Swift类。(Xcode 6 GM,Swift 1.0) 但是当我打电话的时候Ios 无法识别选择器-ReplacementObjectForkeyDarchiver:在Swift中实现NSCoding时崩溃,ios,swift,xcode6,nscoding,Ios,Swift,Xcode6,Nscoding,我创建了一个符合NSCoding的Swift类。(Xcode 6 GM,Swift 1.0) 但是当我打电话的时候 let data=NSKeyedArchiver.archivedDataWithRootObject(cmd) 它给了我这个错误 2014-09-12 16:30:00.463 MyApp[30078:60b] *** NSForwarding: warning: object 0x7a04ac70 of class '_TtC8MyApp7Command' does not i
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类不需要继承就可以工作,但是为了使用NSCoding
,您必须从NSObject
继承
class Command: NSObject, NSCoding {
...
}
太糟糕了,编译器错误信息量不大:(这里是最好的答案@noundla No,你链接中的答案对我的问题不起作用。我尝试了这两种解决方案。1)将@objc
添加到我的命令类和NSCoding方法仍然会给我相同的错误。2) 添加NSObject
与我的答案完全相同。下次你最好先试试。我昨天也遇到过同样的问题,而且解决方案对我很有效。我使用了1和2两种解决方案来解决这个问题。@noundla-wird。可能只是因为我们的问题不同。你的是关于性能选择器:
,而我的是关于NSCoding协议。我在将字典中的自定义Swift对象返回回调块时遇到了这个问题。我想知道我是如何知道这些字典中的值必须符合NSCoding
@RiveraNSCoding
协议允许对象转换为NSData
对象,以便您可以执行诸如将其存储在NSUserDefaults中等操作的。我实际上不知道您正在做的事情是否需要这样做。这就是我能说的。我和WatchKit一起工作。原因是作为参数传递的字典必须是属性列表兼容的。它没有文档记录,但显示在控制台日志中。并且您必须将NSObject作为继承子句中的第一个。
class Command: NSObject, NSCoding {
...
}