Является ли ASIHTTPRequest не асинхронным?

Я использую ASIHTTPRequest для получения некоторых данных из веб-службы.

Я делаю запросы, используя цикл.

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

Правда ли, что ASIHTTPRequest не является асинхронным.

или я должен использовать обычный nsmutablerequest для выполнения асинхронного запроса.


person harshalb    schedule 09.01.2010    source источник


Ответы (2)


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

ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDidFailSelector:@selector(requestWentWrong:)];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:request];
[request release];    

Просто

[request startAsynchronous]; 

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

person Henrik P. Hessel    schedule 09.01.2010
comment
строка nsoperation выдает ошибку, говорящую о том, что метод sharedAppDelegate не будет отвечать на MyAppDelegate. и строка [request startAsynnchronous] также выдает такое же предупреждение. - person harshalb; 09.01.2010
comment
трепло, потому что это всего лишь пример.. подождите минутку - person Henrik P. Hessel; 09.01.2010
comment
отредактировал ответ. [запрос startAsynchronous] не относится к первому фрагменту кода. - person Henrik P. Hessel; 09.01.2010
comment
хорошо, так что в основном мне дают метод [запрос запуска]; Это нормально . - person harshalb; 09.01.2010
comment
startAsynchronous не может быть найден в заголовке класса и выдает предупреждение. Очередь операций — это то, о чем я долго бился головой о стену, пока не додумался. - person natanavra; 09.01.2010
comment
кажется, что startAsynchronous больше не поддерживается. Странно, в документации до сих пор об этом упоминается. - person Henrik P. Hessel; 12.01.2010
comment
startAsynchronous абсолютно по-прежнему поддерживается — я удивлен, что он не отображается для вас в заголовке. Поведение изменилось в последней версии (1.5 на момент написания) — запросы, запущенные с помощью startAsynchronous, теперь выполняются в потоке, из которого они были запущены, а не в глобальной очереди операций. startAsynchronous не будет обновлять индикатор сетевой активности за вас, хотя сделать это самостоятельно несложно. Или используйте очередь, как рекомендовал Хенрик :) - person pokeb; 19.01.2010

Для синхронной синхронизации

  NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  [request startSynchronous];
  NSError *error = [request error];
  if (!error) {
    NSString *response = [request responseString];
  }

Создание асинхронного запроса

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
   // Use when fetching text data
   NSString *responseString = [request responseString];

   // Use when fetching binary data
   NSData *responseData = [request responseData];
}

- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}

И есть много других опций, таких как Очередь и многое другое.

Вы можете обратиться по адресу http://allseeing-i.com/ASIHTTPRequest/How-to-use< /а>

person Kamleshwar    schedule 23.02.2012