Было бы очень полезно, если бы кто-нибудь мог помочь мне остановить синхронный запрос, сделанный на сервер, особенно при переходе с фона на передний план.Можем ли мы остановить синхронный запрос? Как?
Заранее спасибо.
Было бы очень полезно, если бы кто-нибудь мог помочь мне остановить синхронный запрос, сделанный на сервер, особенно при переходе с фона на передний план.Можем ли мы остановить синхронный запрос? Как?
Заранее спасибо.
Если вы используете обычное NSURLConnection, вы можете просто отправить его команде cancel. (docs)
INIT нравится:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
отменить так:
[connection cancel];
мы говорим о +[NSURLConnection sendSynchronousRequest:returningResponse:error:]
? В этом случае вы не можете остановить этот запрос.
Если вам необходимо остановить работу сети в середине полета, вам необходимо использовать асинхронный API. Я лично предпочитаю использовать свой собственный, используя NSURLConnection
, и каков минимальный объем работы для текущей задачи, обычно NSOperation
или просто какой-то GCD. Я настоятельно рекомендую вам научиться использовать NSURLConnection
, даже если вы решите использовать какой-либо другой подход.
Один такой другой подход - AFNetworking, который обертывает NSURLConnection
- это NSOperation
, что вы можете позвонить по телефону cancel
.
Эй, спасибо за это, у меня есть файлы библиотеки, которые используют синхронное соединение и не могут изменять код сейчас. Я делаю вызов сервера в другом потоке, и когда я перехожу с фона на передний план, я проверяю, выполняется ли этот поток, и если это так, я отменяю его, чтобы избежать сбоя, однако я все еще терплю неудачу в низком сетевом соединении, которое говорит «iphone не смог возобновиться вовремя». Я хотел бы исправить эту проблему, не могли бы вы мне помочь? – Nitu
@Nitu не хватает фактически осуществление отмены. Когда ваше приложение будет предложено возобновить, у вас будет 20 секунд, чтобы ответить, иначе сторожевой таймер вас убьет. Изменение кода, не использующего синхронный доступ к сети, является вашим единственным решением. – PeyloW
Эй, Пейлоу, пожалуйста, будьте предельно ясны. Благодарю. – Nitu
Привет, спасибо за ответ, однако у меня нет доступа для получения переменной соединения, а также ее выполнения в файле библиотеки. Пожалуйста, предложите мне лучшее решение для приведенного выше комментария ... – Nitu
Quick 'n dirty: отредактируйте lib, чтобы открыть соединение. Например. например: - (NSURLConnection *) соединение {return _connection; } Альтернативно, вы, возможно, захотите обработать соединение самостоятельно, его достаточно просто, чтобы использовать lib вообще? – Wolfert