0

Я пишу простую библиотеку, используя ASIHTTPRequest, где я получаю URL-адреса способом async. Моя проблема заключается в том, что функция main, которую я написал для тестирования моих выходов lib до завершения асинхронных вызовов.Тестирование загрузки Async с помощью ASIHTTPRequest

Я очень новичок в разработке Obj C и iPhone, может ли кто-нибудь предложить хороший способ подождать до того, как все запросы будут завершены в главном функции?

В настоящее время моя main функция выглядит следующим образом -

int main(int argc, char *argv[]) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    IBGApp *ibgapp = [[IBGApp alloc] init]; 
    IBGLib *ibgl = [[IBGLib alloc] initWithUsername:@"joe" andPassword:@"xxx"]; 

    // The two method calls below download URLs async. 
    [ibgl downloadURL:@"http://yahoo.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)]; 
    [ibgl downloadURL:@"http://google.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)]; 

    [pool release]; 
    return 0; // I reach here before the async calls are done. 
} 

Так что это лучший способ, чтобы ждать, пока Асинхронные вызовы выполняются? Я пробовал спать, но, очевидно, не работает.

ответ

1

Простым и грязным решением является добавление цикла до [пула]; линия. STH. как это:

while(1){ 
    if ([ibgl requests_finished]){ 
     break; 
    } 
} 

Конечно вам нужно будет добавить requests_finished булевых к классу IBGLib и сделать его истинным (YES), когда загрузка закончена. Не забудьте обработать сбой в запросе :).

2

Вы также можете указать объекту ASIHTTPRequest выполнять эти запросы синхронно.

[request startSynchronous]; 
+0

И это лучшая идея :). – Jacek

Смежные вопросы