【问题标题】:Unrecognized selector when accessing properties of URLSessionConfiguration subclass访问 URLSessionConfiguration 子类的属性时无法识别的选择器
【发布时间】: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

【问题讨论】:

    标签: objective-c inheritance foundation unrecognized-selector nsurlsessionconfiguration


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多