Гарантируется ли, чтоRereReResponse предшествует connectionDidFinishLoading? - PullRequest
2 голосов
/ 09 сентября 2011

Справочная информация: Во время процесса установления связи мое приложение для iOS изучает возможности сервера с помощью

  1. Проверка информации заголовка в didReceiveResponse

    И

  2. Анализ XML-ответа в connectionDidFinishLoading

Постановка задачи : с момента обратного вызова# 1 предшествует # 2, я сохраняю строку версии в didReceiveResponse и проверяю ее позже в connectionDidFinishLoading, когда ответ доступен.

Это, к счастью, работает до сих пор, потому что # 1 предшествует # 2.Но всегда ли этот порядок гарантирован сетью / iOS?

Ответы [ 3 ]

3 голосов
/ 09 сентября 2011

С NSURLCOnnection Ссылка :

Zero or more connection:didReceiveResponse: messages will be sent

делегату до получения соединения: didReceiveData: message. Единственный случай, когда соединение: didReceiveResponse: не отправляется делегат, когда реализация протокола сталкивается с ошибкой до того, как ответ может быть создан.

Zero or more connection:didReceiveData: messages will be sent

перед отправкой делегату любого из следующих сообщений: connection: willCacheResponse :, connectionDidFinishLoading :, подключение: didFailWithError:.

Zero or one connection:willCacheResponse: messages will be sent to

делегат после подключения: didReceiveData: отправляется, но до connectionDidFinishLoading: сообщение отправлено.

Таким образом, это не произойдет ТОЛЬКО в случае ошибки до создания ответа.

2 голосов
/ 09 сентября 2011

Согласно документации:

Ноль или более соединений: didReceiveResponse: сообщения будут отправлены делегату до получения соединения: didReceiveData: message. Единственный случай, когда connection: didReceiveResponse: не отправляется делегату, - это когда реализация протокола сталкивается с ошибкой до того, как может быть создан ответ. Ноль или более соединений: didReceiveData: сообщения будут отправлены до того, как делегату отправлено любое из следующих сообщений: connection: willCacheResponse :, connectionDidFinishLoading :, connection: didFailWithError:.

Таким образом, если нет ошибки, вы можете гарантировать получение didReceiveResponse до получения connectionDidFinishLoading.

0 голосов
/ 09 сентября 2011

Да, конечно.В didReceiveResponse вы можете проверить NSURLResponse, и если что-то будет неправильно, вы можете просто прекратить загрузку.Так что connectionDidFinishLoading будет вызываться только после того, как вы проверили ответ.

...