Swift 3 Xcode 8 - SwiftValue encodeWithCoder - 发送到实例的无法识别的选择器
Posted
技术标签:
【中文标题】Swift 3 Xcode 8 - SwiftValue encodeWithCoder - 发送到实例的无法识别的选择器【英文标题】:Swift 3 Xcode 8 - SwiftValue encodeWithCoder - unrecognized selector sent to instance 【发布时间】:2016-10-26 15:17:02 【问题描述】:我的自定义对象使用以下方法符合 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,并且编码/解码没有很好地实现。所以我就跟着***.com/a/37983027/5561910 【参考方案1】:问题是您正在尝试归档可选内容。替换这一行:
if (object != nil)
与:
if let object = object
【讨论】:
哇,谢谢你的澄清。这似乎已经解决了它。我想 nil 比较会起作用,但我必须将其标记为非可选。 如果在我的情况下让 self.eventDataArr.count = self.eventDataArr.count 对象是一个数组,我会遇到错误变量绑定条件需要初始化器 if self.eventDataArr.count > 0 这个条件对我有用,谢谢以上是关于Swift 3 Xcode 8 - SwiftValue encodeWithCoder - 发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
SDWebImage 库在 swift 3 Xcode 8.0 中出现错误
Swift 3、Xcode 8 中的 UINavigationController
Xcode 8 / Swift 3 - 类型“CGColorRenderingIntent”没有成员“RenderingIntentDefault”