Метод делегата / селектор для NSURLConnection - PullRequest
0 голосов
/ 10 ноября 2011

Я создаю класс обслуживания в Objective-C, который связывается с HTTP-сервером. Я знаком с NSURLConnection и связанными классами, чтобы сделать асинхронный запрос к серверу. До сих пор я использовал self в качестве делегата, отвечая на четыре метода делегата (didReceiveResponse, didReceiveData и т. Д.), Необходимых для вызова.

Класс обслуживания, который я создаю, должен уметь обрабатывать несколько запросов одновременно и по-разному отвечать на каждый. Я ищу способ добиться этого без бесконечного переключения или if-elseif в методе connectionDidFinishLoading.

У меня есть идея создать класс делегата, который реализует четыре метода, описанных выше, и передать его объекту NSURLConnection для общения. Тем не менее, я хочу уведомить родительский класс, когда соединение завершает загрузку, а затем запустить другой метод в родительском классе. И, конечно, делегат не знает, какой это метод - это может быть что угодно.

Как поступить? Есть ли способ установить селектор для класса делегата и запустить этот селектор (который является методом), когда запрос завершен? Как мне сделать такую ​​вещь?

(Создание делегата для моего делегата, а затем вызов метода суперкласса может помочь, но я действительно изучаю подстановочные методы, такие как селектор.)

Любая помощь очень ценится!

С уважением,

Reinder

Ответы [ 2 ]

0 голосов
/ 18 мая 2014

У вас есть три варианта:

  1. Использование обратного вызова блока
  2. Использование уведомлений
  3. Использование делегата, как вы уже предлагали.

Все три являются абсолютно действительными, но с различными преимуществами / недостатками. Изучите их все, а затем решите, что использовать в каждом сценарии. : -)

Часто выбирается более одного решения. Например, многие из классов Apple реализуют метод делегата и отправляют уведомление об одном и том же событии.

0 голосов
/ 10 ноября 2011

Я бы передал блок (^{ ... }) делегату, который он должен вызвать после завершения соединения.

...