加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift3 – Swift 3 Xcode 8 – SwiftValue encodeWithCoder –

发布时间:2020-12-14 04:41:40 所属栏目:百科 来源:网络整理
导读:我的自定义对象符合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:
我的自定义对象符合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 – 无法识别的选择器发送到实例

显然这种方法不可用,为什么不被认可?

参考文献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)
    }
}

解决方法

问题是您正在尝试存档可选项.替换此行:

if (object != nil) {

有:

if let object = object {

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读