Я реализую пользовательский NSURLProtocol
и внутренне хочу использовать NSURLSession
с задачами данных для внутренних сетей вместо NSURLConnection
.Проверка подлинности аутентификации NSURLSessionTaskHandler и NSURLAuthenticationChallenge клиент
Я столкнулся с интересной проблемой и задаюсь вопросом о внутренней реализации обработчика проблем NSURLSession
/NSURLSessionTask
.
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler;
Здесь я в основном с двумя различными обработчиками вызова, один является completionHandler
блока, который снабжен всей необходимой информацией, чтобы справиться с проблемой, но есть также наследие NSURLAuthenticationChallenge.client
, который имеет методы, которые соответствуют в значительной степени один к одному с параметрами информации completionHandler
.
Поскольку я занимаюсь разработкой протокола, и хотел бы передать определенные проблемы аутентификации вверх систему загрузки URL для вызова API для реализации, нужно использовать метод NSURLSession
клиента:
- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
Мой вопрос заключается в является ли внутренняя реализация completionHandler
и NSURLAuthenticationChallenge.client
одинаковой, и если да, могу ли я пропустить вызов обработчика завершения в методе делегирования с ожиданием, что система загрузки URL вызовет соответствующий метод NSURLAuthenticationChallenge.client
?
Предоставлено непрофессиональным отправителем? Вы имеете в виду базовый класс NSURLProtocol? – dgatwood
Каждый объект-запрос имеет свойство отправителя, однако он прерывается для протоколов. –
С точки зрения времени выполнения не может быть какой-либо разницы между передачей объекта challengeWrapper и реализацией тех же самых методов в вашем подклассе NSURLProtocol и передачей себя как отправителю вызова, что, как говорят документы, вам следует делать. Я не уверен, почему вы должны реализовать эти методы вообще - это, вероятно, ошибка, и вы должны подать один, но обычно вы должны передавать подкласс NSURLProtocol в качестве отправителя, а не другой объект. – dgatwood