2014-01-21 76 views
0

我有一個視圖控制器,頂部有三個分段按鈕,下面有一個表格視圖。當用戶點擊一個按鈕時,會調用一個URL,並將相應的數據加載到單元格中。然後,適當的圖像在後臺加載並更新表格視圖。問題出在用戶點擊不同的按鈕時,最後一組數據的圖像尚未完成加載。最初,我阻止用戶點擊一個不同的按鈕,直到所有的第一個數據完成加載。但是這真的很慢。然後,我嘗試等待,直到所有圖像在更新tableview之前完成加載,但這也很慢。除了製作三個桌面之外,還有更好的方法嗎?以下是我如何獲取圖像。帶有動態數據和背景圖片加載的iOS TableView

- (void) getImageLinks:(int)number{ 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[imageLinks objectAtIndex:number]]; 
[request setAllHTTPHeaderFields:@{@"User-Agent": @"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"}]; 
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
    if([data length] > 0){ 
     UIImage *image = [UIImage imageWithData:data]; 
     if(image){ 
      [images addObject:image]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       if(number<[imageLinks count]-1){ 
        [self getImageLinks:number+1]; 
       }else{ 
        isRefreshing = NO; 
        _segmentedControl.userInteractionEnabled = YES; 
        NSLog(@"end refreshing"); 
        [_tableView reloadData]; 
        [refreshControl endRefreshing]; 
       } 
      }); 
     }else{ 
      NSLog(@"NO IMAGE"); 
     } 
    } 
}]; 
+0

btwn你的源代碼在哪裏? –

+0

更新後顯示源代碼。 –

+0

你可以使用字典處理三個按鈕點擊段。首先用任意鍵將數據存儲在字典中,然後將該字典添加到主數組中,然後單擊從該字典中獲取該字典並加載。當您第一次請求從服務器獲取數據時,也會給該標記該請求,以便在後臺獲取所有數據。 –

回答

0

您還沒有使用後臺隊列來請求數據。只需將請求調用到後臺隊列中的URL並保存圖像數據即可。然後,您可以使用dispatch_sync()方法同步調用映像以更新到主隊列中的ImageView。

+0

請求數據不是問題。更新表是。 –