ASIHTTPRequest синхронно - PullRequest
       4

ASIHTTPRequest синхронно

4 голосов
/ 20 января 2010

У меня есть приложение для iPhone, которое использует ASIHTTPRequest для связи со службой REST на моем сервере.Когда я работаю на симуляторе, он работает просто отлично, но когда я захожу на сам телефон, у меня странное поведение.

При первом нажатии кнопки, которая инициирует запрос, я получаюРезультаты возвращаются немедленно, и все в порядке.С этого момента, когда я нажимаю кнопку, чтобы установить соединение, соединение занимает около 2-3 минут.Похоже, что запрос ASIHTTPRequest, который я начал первым (и от которого я уже получил правильные результаты), еще не завершен.Есть ли какая-то магия, которую я должен использовать, чтобы завершить исходный запрос перед началом следующего?Я предполагал, что с тех пор, как вернулся метод -start, и у меня есть результаты с сервера, что исходный запрос был выполнен, и я мог запустить другой.

Есть идеи?

Спасибо

- Стив

Ответы [ 2 ]

6 голосов
/ 25 октября 2010

Стив. То, что вы описали, является распространенной проблемой, которая возникает, если запросы пытаются сохранить постоянное соединение.Попробуйте это:

[request setShouldAttemptPersistentConnection:NO];
2 голосов
/ 20 января 2010

Вы не должны вызывать метод -start, он принадлежит NSOperation.Интерфейс ASIHTTPRequest имеет либо -startSynchronous, либо -startAsynchronous.

Однако настоятельно рекомендуется использовать асинхронный вызов, иначе ваш основной поток (т. Е. Пользовательский интерфейс) будет заблокирован.Документация по ASIHTTPRequest [1]

В общем, вы должны использовать асинхронные запросы, а не синхронные.Когда вы используете ASIHTTPRequest синхронно из основного потока, пользовательский интерфейс вашего приложения будет заблокирован и станет недоступным на время запроса.Синхронные запросы действительно подходят только для программного обеспечения без пользовательского интерфейса (например, сценарий, который запускается из терминала), или если вы выполняете запрос из отдельного потока, который вы обслуживаете (например, изнутри вашей собственной NSOperation).

[1] http://allseeing -i.com / ASIHTTPRequest / Как использовать

...