0

我已經完成了所有的編碼,我使用XML獲取數據,然後在UITableView上顯示數據,數據顯示時不使用GCD,但是當我添加UIActivityIndi​​cator並使用gcd,這樣ActivityIndi​​cator將顯示直到所有數據都沒有到達。UITableView數據沒有出現在主視圖使用GCD(Grand Central Dispatch)

這裏是我的代碼:

[super viewDidLoad]; 

    [self.activityIndicator startAnimating]; 
    self.activityIndicator.hidesWhenStopped = YES; 



    dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_async(myQueue,^{ 
     xmlParser = [[XMLParser alloc]loadXMLByURL:@"http://www.irabwah.com/mobile/core.php?cat=0"]; 
     [self.activityIndicator performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:YES]; 
    }); 
在這裏

其返回我零,表示沒有數據到達,什麼問題?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    if ([xmlParser listPopulated] == nil) { 
     NSLog(@"number of row = %i",[[xmlParser listPopulated]count]); 
     return 0; 
    } else { 
     NSLog(@"number of row = %i",[[xmlParser listPopulated]count]); 
     return [[xmlParser listPopulated]count]; 
    } 
} 
+0

您需要添加加載數據到數據/ tableview中的其他代碼。我敢打賭,它是在異步方法返回之前觸發的,因此在表視圖呈現時您的數據是空的。 – bryanmac

+0

除了在讀取數據的_thread_的末尾停止活動指示符以外,你究竟做了什麼? – peko

+0

@bryanmac:我在我的項目中做的是從XML獲取數據並將其顯示到TableViewCell中,而我真的不明白你說的是什麼,有點在這裏混淆。 –

回答

0

試試這個:

dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_async(myQueue,^{ 
     xmlParser = [[XMLParser alloc]loadXMLByURL:@"http://www.irabwah.com/mobile/core.php?cat=0"]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
     [activityIndicator performSelector:@selector(stopAnimating)]; 
    }); 
    }); 
+0

仍然在做同樣的事情,並顯示沒有。這裏是屏幕截圖的鏈接http://i178.photobucket.com/albums/w255/ace003_album/ScreenShot2013-08-21at50949PM.png –

0

嗯,首先你需要改變你的數據源的方法來反映異步加載。例如:

- (int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (xmlParser == nil) 
    { 
     return 0; 
    } 
    else 
    { 
     return %NUMBER_OF_ROWS%; 
    } 
} 

那麼你應該重新載入您的tableView後,數據加載將完成:

dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

    dispatch_async(myQueue,^{ 
     xmlParser = [[XMLParser alloc]loadXMLByURL:@"http://www.irabwah.com/mobile/core.php?cat=0"]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [activityIndicator stopAnimating]; 
      [self.tableView reloadData]; 
     }); 
    }); 
+0

plz再次檢查主要問題,從numberOfRowsInSection –

相關問題