在 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 中编码对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 json 编码对象在 Swift 中为零

Swift/JSONEncoder:包含嵌套原始 JSON 对象文字的编码类

如何将 protobuf 对象转换为 ByteArray 并在 Swift 中使用 Base64 URL_SAFE 进行编码?

Swift 和 NSCoding:对符合类协议的对象数组进行编码

Swift 中的 Base64 编码不会在 Android 中解码

Xcode 6 在用 Swift 编码进行预测时添加了两个点(句点)