gpt4 book ai didi

ios - 使用解码对象(: forKey:) to decode an object that conforms to a protocol

转载 作者:可可西里 更新时间:2023-11-01 00:31:31 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com