访问 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 子类的属性时无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章