作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 Objective-C 协议(protocol),需要符合 NSSecureCoding
:
@protocol MyProtocol <NSObject, NSSecureCoding>
…
@end
我有一个父对象,它存储对符合 MyProtocol
的对象的引用,我希望父对象也符合 NSSecureCoding
。当我尝试这个时:
required init?(coder aDecoder: NSCoder) {
if let childObject = aDecoder.decodeObject(of: MyProtocol.self, forKey: "childObject") {
self. childObject = childObject
} else {
return nil
}
}
我收到错误:'decodeObject(of:forKey:)' 在 Swift 中不可用:使用通用的 'decodeObjectOfClass(_:forKey:)'
。
如果你不知道你编码的对象的具体类,有什么方法可以使用 NSSecureCoding 吗?
最佳答案
NSSecureCoding
的全部意义在于防止这种用例。如果您不知道正在解码的类,那么攻击者可以诱使您解码为一个行为不同于您对给定方法所期望的类的类(称为“替换攻击”)。这是一种用于攻击系统的技术,开发了 NSSecureCoding
来阻止它。
即使不是这种情况,也不可能构造协议(protocol)类型的对象。运行时无法知道为实例变量分配多少内存。
为了符合NSSecureCoding
,您必须知道所有子对象的准确类。
关于ios - 使用解码对象(: forKey:) to decode an object that conforms to a protocol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750655/
我是一名优秀的程序员,十分优秀!