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 {
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
