Я реализую пользовательский NSURLProtocol
и хочу использовать NSURLSession
с задачами данных для внутренней сети вместо NSURLConnection
.
Я столкнулся с интересной проблемой и задаюсь вопросом о внутренней реализации обработчика вызовов 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
?