Как безопасно отменить все запросы в ASINetworkQueue на просмотр deallocate - PullRequest
0 голосов
/ 19 января 2012

У меня ASINetworkQueue с более чем 1500 запросами.Выполнение этого количества запросов занимает некоторое время.Если пользователь покидает контроллер представления, пока эта очередь работает, ОС освобождает контроллер представления, и я получаю сообщение об ошибке «сообщение отправлено освобожденному экземпляру».

Я пытался использовать

[self.queue cancelAllOperations];

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

Как правильно справиться с этой ситуацией?Можно ли заставить контроллер представления не освобождаться, пока очередь не завершена, даже если пользователь покинул ее?Или есть способ отменить все запросы (включая запущенные) в очереди?

Ответы [ 2 ]

1 голос
/ 19 января 2012

Предложения @ darvids0n и @AlexReynolds хороши.

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

Скорее всего, этого можно избежать, установив для всех делегатов значение nil:

for (ASIHTTPRequest *req in queue.operations)
{
    [req setDelegate:nil];
    [req cancel];
}
[queue setDelegate:nil];
0 голосов
/ 19 января 2012

Отключите срок службы сетевой очереди от контроллера представления. Например, им управляет делегат приложения, который должен быть живым, пока приложение живо.

Когда контроллер представления отклонен, отмените все операции в сетевой очереди делегата приложения. Даже если контроллер представления не работает, делегат приложения должен продолжать пыхтеть, предоставляя достаточно времени сетевой очереди для выполнения своей работы по очистке.

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

...