我的自定义对象符合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 {
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。