2013-12-09 3 views
0

У меня есть uiView, покрывающий экран ярлыком и идентификатором, который запускается, когда я делаю сетевой вызов.UIView с uiindicator sethidden = Нет работы после sethidden = YES

Теперь вот в чем проблема. Я инициализирована как это в viewdidload

[self.UiIndicator_view setHidden:YES]; 
[self.UiIndicator_label setHidden:YES]; 
[self.UiIndicator_indicator setHidden:YES]; 

На сетевом вызове я назвал

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^
{ 
      [self ShowIndicator:@"Syncing Data"]; 

      if([self CheckNetwork]) 
       [HttpMethods GetHeaderDataForAppHttp]; 
      dispatch_async(dispatch_get_main_queue(),^
      { 
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Network Error" 
                    message:@"You have no network connection. Please connect to a network to sync data." 
                   delegate:self 
                 cancelButtonTitle:@"Ok" 
                 otherButtonTitles:nil]; 

       [alertView show]; 
       [self StopIndicator]; 
      }); 
}); 

и методы являются

-(void)ShowIndicator:(NSString*)labelText 
{ 
    [self.UiIndicator_view setHidden:NO]; 
    [self.UiIndicator_label setHidden:NO]; 
    [self.UiIndicator_label setText:labelText]; 
    [self.UiIndicator_indicator setHidden:NO]; 
    [self.UiIndicator_indicator startAnimating]; 
} 

-(void)StopIndicator 
{ 
    [self.UiIndicator_view setHidden:YES]; 
    [self.UiIndicator_label setHidden:YES]; 
    [self.UiIndicator_indicator setHidden:YES]; 
    [self.UiIndicator_indicator stopAnimating]; 
} 

Теперь проблема. Код запускается отлично, когда я запускаю приложение в первый раз. Вызов переходит на dispatch_asyn, я вижу UIView с меткой и индикатором, и после того, как вызов возвращается в основной поток, uiview и индикатор исчезают, и я получаю предупреждение, если данные не были получены.

Я дал пользователю возможность вручную вызвать ту же функцию, если данные не могли быть получены с первой попытки. Здесь возникает проблема, я могу видеть в NSLOG, что метод был вызван, HTTP-запрос запущен, но я не вижу uiview с индикатором, даже элементы и кнопки, которые должны быть за uiview, не доступны для кликов (это означает, что что есть UIVIEW сверху, но я не вижу его). через некоторое время я получаю uialeart, что означает, что звонок завершен.

Устанавливает ли uiview скрытый = да аннулирует его или что-то в этом роде? я не могу получить эту простую проблему.

ответ

1

Вы звоните [self ShowIndicator:@"Syncing Data"]; в фоновом режиме.

Только обновлять пользовательский интерфейс в главной очереди.

Более конкретно:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^
{ 
    [self ShowIndicator:@"Syncing Data"]; <<<< THIS IS YOUR PROBLEM 
+0

@Infinty Джеймс: Спасибо человек. :) –

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