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

时间:2019-06-21 10:58:03

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

我想对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 个答案:

答案 0 :(得分:1)

在更仔细地检查了URLSessionConfiguration的文档之后,我注意到init()被标记为已弃用。这清楚地表明该类并非像我以前那样被子类化。特别是在我的子类的init中对super.init()的调用可能创建了一个“损坏的”实例。

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

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

我得到的值__NSCFURLSessionConfiguration清楚地表明NSURLSessionConfiguration可能被实现为Class Cluster,这可能就是CustomSessionConfiguration不继承属性访问器的原因