2013-12-09 73 views
0

我有一個uiView覆蓋屏幕與標籤和uiindicator運行時,我正在進行網絡調用。UIView與uiindicator sethidden =沒有不工作後sethidden =是

現在是這個問題。我在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和指示器消失,如果沒有數據被提取,我會得到alertview。

如果在第一次嘗試時無法獲取數據,我已給予用戶手動調用相同函數的選項。這裏出現問題,我可以在NSLOG中看到該方法已被調用,http請求被觸發,但我無法看到帶有指示器的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詹姆斯:感謝的人。 :) –

相關問題