Общий шаблон делегата HTTP-запроса в Objective-c (iOS) - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть контроллер представления "myViewController", который делает HTTP-запросы. Я установил для делегатов запроса значение self (экземпляр myViewController). Все работает нормально, пока я не вытолкну myViewController из стека навигации, прежде чем запрос вернется. В этом случае запрос пытается отправить сообщение на mylocController dealloc'd (что приводит к сбою приложения).

В настоящее время я исправляю / решаю эту проблему, устанавливая делегат всех запросов на nil в методе dealloc myViewController. Какой лучший способ сделать это?

Возможно, один обработчик может отвечать за обработку всех HTTP-запросов?

Ответы [ 2 ]

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

Некоторое время назад у меня была такая же проблема для событий делегата UIWebView. Решение состоит в том, чтобы отслеживать все исходящие HTTP-запросы в вашем myViewController. Поэтому сохраните переменную экземпляра с именем mutableRequests, в которую вы добавляете каждый отправленный вами запрос. Вероятно, будет хорошей идеей удалить запросы из этого массива после их завершения.

В методе -viewWillUnload просто перечислите через mutableRequests и отмените каждый запрос. Это не только позволит вам отменить все запросы до того, как ваше представление будет освобождено, но также поможет вам соблюдать модель программирования релиз / сохранение, сохраняя все объекты в массиве, пока они используются.

1 голос
/ 05 сентября 2011

Зависит от того, что вы просматриваете, делает контроллер. Если запросы относятся только к этому VC, то делайте то, что предлагает Алекс. Если ваше приложение вращается вокруг запросов (центральная часть функциональности), вы, вероятно, захотите этот синглтон. Вам, вероятно, также понадобится общий делегат, который реализуют все ваши контроллеры представления, чтобы любой существующий контроллер представления мог обрабатывать ваш вызов делегата. Очевидно, что ваш одноэлемент обработки запросов будет служить фактическим делегатом ваших запросов, и при необходимости вызовите ваши методы делегирования.

...