Нераспознанный селектор при доступе к свойствам подкласса URLSessionConfiguration - PullRequest
0 голосов
/ 21 июня 2019

Я хотел создать подкласс URLSessionConfiguration, чтобы установить некоторые значения по умолчанию для таких свойств, как интервалы времени ожидания и httpHeaders. Итак, я пришел с этим пользовательским подклассом.

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

Но когда я создал экземпляр CustomSessionConfiguration, произошел сбой по следующей причине:

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

Кажется, что мой подкласс не наследовал метод установки для timeoutIntervalForResource. Обратите внимание, что то же самое происходит для других свойств класса, таких как httpAdditionalHeaders.

1 Ответ

1 голос
/ 21 июня 2019

После более тщательной проверки документации на URLSessionConfiguration я заметил, что init() помечен как устаревший. Это четкий сигнал о том, что класс не предназначен для подкласса, как я делал. В частности, вызов super.init() в моем подклассе 'init', вероятно, создавал "сломанный" экземпляр.

Более того, если я создаю экземпляр с использованием метода класса default:

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

Я получаю значение __NSCFURLSessionConfiguration, которое довольно ясно указывает на то, что NSURLSessionConfiguration, вероятно, реализован как кластер классов , и это, вероятно, причина, по которой CustomSessionConfiguration не наследовал средства доступа к свойствам.

...