在 Swift 中编码对象
Posted
技术标签:
【中文标题】在 Swift 中编码对象【英文标题】:Encode Object in Swift 【发布时间】:2014-07-05 18:34:43 【问题描述】:我不确定这是早期的 swift 错误还是我做错了什么。我有我想保存在用户默认值上的自定义类对象。为此,我需要对我的自定义对象的NSData
进行编码:
var myEncodedObject:NSData = NSKeyedArchiver.archivedDataWithRootObject(myObject)
问题是我遇到了一个错误,我认为这可能是一个错误。
2014-07-05 15:25:35.317 myAppName[12323:1008333] -[_myAppName encodeWithCoder:]: unrecognized selector sent to instance 0x1190c7f0
2014-07-05 15:25:35.323 myAppName[12323:1008333] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_myAppName encodeWithCoder:]: unrecognized selector sent to instance 0x1190c7f0'
任何人有同样的问题或知道如何绕过这个问题?
【问题讨论】:
你的班级是否实现了 NSCoding? Simple Swift class does not compile 的可能重复项 链接的答案演示了如何从 swift 中使用 NSCoding 【参考方案1】:NSKeyedArchiver
在你的对象上调用encodeWithCoder:
,这显然没有实现它。
基本上,您需要告诉归档器如何对您的对象进行编码。在 Cocoa 中这样做的方式是让您的类实现 NSCoding
协议,该协议定义了两种方法:
encodeWithCoder:
initWithCoder:
查看How to use NSCoder 了解有关如何符合要求的更多信息。这是一个 Objective-C 问题,但转换为 swift 应该很简单。
【讨论】:
以上是关于在 Swift 中编码对象的主要内容,如果未能解决你的问题,请参考以下文章
Swift/JSONEncoder:包含嵌套原始 JSON 对象文字的编码类
如何将 protobuf 对象转换为 ByteArray 并在 Swift 中使用 Base64 URL_SAFE 进行编码?
Swift 和 NSCoding:对符合类协议的对象数组进行编码