Swift 3 Xcode 8 - SwiftValue encodeWithCoder - unrecognized selector sent to instance Swift 3 Xcode 8 - SwiftValue encodeWithCoder - 未识别的选择器发送到实例

5

我的自定义对象符合以下 NSCoding 协议的方法

required init(coder decoder: NSCoder) {
    super.init()

    createdDate = decoder.decodeObject(forKey: "created_date") as? Date
    userId = decoder.decodeInteger(forKey: "user_id")
}

func encode(with aCoder: NSCoder) {
    aCoder.encode(createdDate, forKey: "created_date")
    aCoder.encode(userId, forKey: "user_id")
}

这是Swift 3中NSCoding协议的正确方法名,但应用程序崩溃并出现错误SwiftValue encodeWithCoder - unrecognized selector sent to instance 显然,该方法不可用,那么为什么它没有被识别?
参考:https://developer.apple.com/reference/foundation/nscoding 这是我创建的归档器方法。
func encodeObject(_ defaults:UserDefaults, object:NSCoding?, key:String) {
    if (object != nil) {
        let encodedObject = NSKeyedArchiver.archivedData(withRootObject: object)
        defaults.set(encodedObject, forKey: key)
    } else {
        defaults.removeObject(forKey: key)
    }
}

在我的情况下,我正在将应用程序从Swift 2迁移到4,并且编码/解码没有实现良好。因此,我只是按照https://dev59.com/NloT5IYBdhLWcg3w8jJm#37983027的建议进行操作。 - Maor
1个回答

5
问题在于您正在尝试对一个可选项进行归档。请替换此行代码:
if (object != nil) {

使用:

if let object = object {

哇,感谢您的澄清。看起来问题已经解决了。我想空值比较可能会起作用,但我必须将其标记为非可选项。 - MechEngineer
如果让self.eventDataArr.count = self.eventDataArr.count, 在我的情况下,对象是一个数组, 我会得到以下错误 条件中的变量绑定需要初始化程序 - Rajath Kornaya
如果self.eventDataArr.count > 0,那么这个条件对我很有用,谢谢。 - Rajath Kornaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接