首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用decodeObject(of: forKey:)解码符合协议的对象

使用decodeObject(of: forKey:)解码符合协议的对象
EN

Stack Overflow用户
提问于 2018-06-08 05:52:43
回答 1查看 1.3K关注 0票数 5

我有一个要求符合NSSecureCoding的Objective-C协议

代码语言:javascript
复制
@protocol MyProtocol <NSObject, NSSecureCoding>
…
@end

我有一个父对象,它存储了对符合MyProtocol的对象的引用,我希望父对象也符合NSSecureCoding。当我尝试这样做时:

代码语言:javascript
复制
required init?(coder aDecoder: NSCoder) {

    if let childObject = aDecoder.decodeObject(of: MyProtocol.self, forKey: "childObject") {
        self. childObject = childObject
    } else {
        return nil
    }
}

我得到的错误是:'decodeObject(of:forKey:)' is unavailable in Swift: use generic 'decodeObjectOfClass(_:forKey:)'

如果您不知道所编码的对象的特定类,有什么方法可以使用NSSecureCoding吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 06:32:01

NSSecureCoding的全部意义在于防止这种用例。如果您不知道您正在解码的类,那么攻击者可以诱使您解码成一个行为与您对给定方法期望的类不同的类(称为“替换攻击”)。这是一种用于攻击系统的技术,开发NSSecureCoding就是为了阻止它。

即使不是这样,也不可能构造协议类型的对象。运行时将无法知道为实例变量分配多少内存。

为了符合NSSecureCoding,您必须知道所有子对象的确切类。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50750655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档