访问 URLSessionConfiguration 子类的属性时无法识别的选择器

Posted

技术标签:

【中文标题】访问 URLSessionConfiguration 子类的属性时无法识别的选择器【英文标题】:Unrecognized selector when accessing properties of URLSessionConfiguration subclass 【发布时间】:2019-06-21 10:58:03 【问题描述】:

我想继承 URLSessionConfiguration 来为超时间隔和 httpHeaders 等属性设置一些默认值。所以我带来了这个自定义子类。

class CustomSessionConfiguration: URLSessionConfiguration 
    init(time: TimeInterval) 
        super.init()
        timeoutIntervalForResource = time
        

但是当我实例化CustomSessionConfiguration 时发生了崩溃,原因如下:

-[CustomSessionConfiguration setTimeoutIntervalForResource:]: unrecognized selector sent to instance 0x6000021b76c0

看来我的子类没有继承timeoutIntervalForResource 的setter 方法。请注意,该类的其他属性也会发生同样的情况,例如 httpAdditionalHeaders

【问题讨论】:

【参考方案1】:

在更仔细地检查了URLSessionConfiguration 的文档后,我注意到init() 被标记为已弃用。这是一个明确的信号,表明该类不打算像我所做的那样被子类化。特别是在我的子类的 init 中对 super.init() 的调用可能会创建一个“损坏的”实例。

此外,如果我使用default 类方法创建一个实例:

let config = URLSessionConfiguration.default
print(type(of: config))

我得到了 __NSCFURLSessionConfiguration 的值,它非常清楚地表明 NSURLSessionConfiguration 很可能实现为 Class Cluster,这可能是 CustomSessionConfiguration 没有继承属性访问器的原因。

【讨论】:

以上是关于访问 URLSessionConfiguration 子类的属性时无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

访问性模式

如何设置MSSQL数据库访问用户及访问权限

在SQL数据访问中如何对不同级别设置访问权限

有效访问时间和平均访问时间

一个网站用域名可以访问,用ip不能访问,是为啥?

C盘 位置不可用,无法访问C:\ 拒绝访问