正在開發一個應用程序,我必須從JSON獲取數據並在UITableView中顯示。在後臺獲取數據。但它似乎無限循環。dispatch_async進入無限循環
任何幫助將不勝感激。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
queue = dispatch_queue_create("com.events.app", NULL);
dispatch_async(queue, ^{
[self load];
//Need to go back to the main thread since this is UI related
dispatch_async(dispatch_get_main_queue(), ^{
// store the downloaded image in your model
Events *evObj = [eventsArray objectAtIndex:[indexPath row]];
NSLog(@"evObj = %@",evObj);
cell.textLabel.text = evObj.eName;
cell.detailTextLabel.text = @"Detailed Text";
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]
withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView endUpdates];
});
});
// Configure the cell...
return cell;
}
您不能在具有返回類型的方法中使用異步方法。由於'UITableViewCell'被重用,你可以修改一個不再綁定到相同索引路徑的單元。你也不應該在'tableView:cellForRowAtIndexPath:'中重新插入單元格,因爲這會調用'tableView:cellForRowAtIndexPath:'。 – rckoenes 2013-04-04 12:02:38
@vitality這是不正確的,你應該在主線程上執行UI任務。當它們異步分派時,塊將被添加到主隊列並按順序執行。 – rckoenes 2013-04-04 12:06:59
@rckoenes的確我不知道我的頭在剛纔的位置:P – 2013-04-04 12:09:13