Отмена ASIHTTPRequest - PullRequest
       8

Отмена ASIHTTPRequest

1 голос
/ 28 февраля 2012

Где находится правильное место для отмены текущего запроса ASIHttpRequest?Так я делаю свою отмену, но она продолжает падать, когда я перехожу из одного контроллера просмотра в другой, не позволяя завершить запрос .Запрос на отмену работает нормально, но при переключении обратно на первый Viewcontroller происходит сбой.

    -(void)viewWillDisappear:(BOOL)animated
    {
      [super viewWillDisappear:animated];

      if(!DID_FINISH_REQUEST)
      {
        [requestNewReleases setDelegate:nil];
        [requestNewReleases cancel];
        [requestNewReleases clearDelegatesAndCancel];
      }
    }

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

В документации ASIHttpRequest есть пример отмены запроса в методе dealloc:

Безопасное обращение с делегатом, освобожденным до того, как запрос закончил

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

В приведенном ниже примере наш контроллер имеет ASIHTTPRequest, хранящийся в сохраненная переменная экземпляра. Мы вызываем метод clearDelegatesAndCancel в реализации dealloc, прежде чем мы выпустим нашу ссылку на запрос:

- (void)dealloc
{
   [request clearDelegatesAndCancel];
   [request release];
   ...
   [super dealloc];
}
2 голосов
/ 24 июля 2013

Это зависит от вашей архитектуры и потребностей приложения - например. Если есть несколько запросов http, только некоторые из которых нужно отменить?

Тогда раствор -

for (ASIHTTPRequest *req in ASIHTTPRequest.sharedQueue.operations)
{
    [req cancel];
    [req setDelegate:nil];
}

Это приведет к отмене и удалению делегата всех выполняющихся запросов, которые были назначены очереди по умолчанию.

...