2013-10-14 2 views
2

У меня проблема: я использовал AFNetworking для получения данных с сервера, я использовал NSOperationQueue, чтобы добавить к нему много операций, в каждом запросе я добавил эту операцию в очередь и использовал waitUntilAllOperationsAreFinished as ниже:Как добавить MBProgressHUD ожидание загрузки данных в iOS

request 1 
... 
    [queue addOperation:operation1]; 
    [queue waitUntilAllOperationsAreFinished]; 

request 2 
... 
    [queue addOperation:operation2]; 
    [queue waitUntilAllOperationsAreFinished]; 

Я попытался выше код и мои программы, кажется, зависаний и после этого, он работает ok.So, что я хочу добавил MBProgressHUD ожиданию закончить очереди, то я хочу, чтобы проверить, если закончить очереди, я хочу скрыть MBProgressHUD. Но когда я нажимаю кнопку Button для загрузки UIViewController, MBProgressHUD не может показать.

HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
[self.view addSubview:HUD]; 
HUD.delegate = self; 
HUD.labelText = @"Loading"; 

На самом деле, я хочу показать MBProgressHUD при завершении очереди. Как я могу это сделать? Спасибо всем

ответ

12

Вскоре вы можете сделать это следующим образом:

[MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
[MBProgressHUD hideHUDForView:self.view animated:YES]; 

Проверить MBProgressHUD «s usage

+0

Спасибо, я пробовал, но до сих пор не работает –

2

waitUntilAllOperationsAreFinished будет Бок текущий поток, который, вероятно, основной поток, так что вы действительно не хотите для этого.

Если вы используете AFNetworking затем проверить этот метод на AFHTTPClient

- (void)enqueueBatchOfHTTPRequestOperations:(NSArray *)operations 
           progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock 
          completionBlock:(void (^)(NSArray *operations))completionBlock; 

Так показать вам HUD затем вызвать этот метод и скрыть свой HUD в completionBlock

+0

спасибо за ваше предложение –

3

Другой лучший подход ..

HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
    HUD.labelText = @"Doing funky stuff..."; 
    HUD.detailsLabelText = @"Just relax"; 
    HUD.mode = MBProgressHUDModeAnnularDeterminate; 
    [self.view addSubview:HUD]; 

    [HUD showWhileExecuting:@selector(doSomeFunkyStuff) onTarget:self withObject:nil animated:YES]; 

И doSomeFunkyStuff

- (void)doSomeFunkyStuff { 
    float progress = 0.0; 

    while (progress < 1.0) { 
     progress += 0.01; 
     HUD.progress = progress; 
     usleep(50000); 
    } 
} 

Деталь answer is here..

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