2014-09-24 100 views
0

我正在開發一個新聞應用程序。我正在使用表視圖來顯示新聞。要從服務器下載數據,我正在使用sendAsynchronousRequest取消重複請求NSURLConnection

NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 
     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
     { 
      if ([data length] > 0 && error == nil) 
      { 
       downloadedItem = [GNNewsItems saveDataToModel:data]; 
       if ([self.delegate respondsToSelector:@selector(receivedResponse:)]) 
       { 
        [self.delegate performSelectorOnMainThread:@selector(receivedResponse:) withObject:downloadedItem waitUntilDone:NO]; 
       } 
      } 
      else if ([data length] == 0 && error == nil) 
      { 
       // Data not downloaded 
      } 
      else if (error != nil) 
      { 
       // error 
      } 
     }]; 

到目前爲止好。現在考慮一個案例:

  1. 用戶打開應用程序。
  2. 表視圖發送請求下載第一個單元格的內容。 讓我們假設下載數據需要10秒。
  3. 用戶將表格視圖滾動到第5個單元格。
  4. 表視圖發送第5個單元格的請求。
  5. 現在用戶回到第一個單元,但單元1發送的初始請求的內容尚未下載。
  6. 表視圖將發送第一個單元格的重複請求。

如何從表視圖中取消重複的請求?

回答

0

創建一個NSMutableArray,其中將包含請求已經發起的小區的indexPath。在啓動網絡請求之前,如果請求已經啓動,或者沒有啓動,請在單元格中檢查新的網絡請求。如果沒有,那麼啓動它,否則什麼也不做

0

你的設計描述聽起來像你沒有使用標準的模型/視圖設計範例。您應該將標題和其他相關數據(例如完整故事或鏈接存儲在某種類型的數據存儲庫中)數組或CoreData等。該對象是請求故事並更新數據元素的內容。然後它只會在後臺執行一次,一旦完成,就完成了。

然後tableView使用該數據存儲填充表格單元格。這是一個非常糟糕的設計,在每次細胞滾動查看故事時,都會要求故事。它具有剛剛提到的設計問題,並且非常浪費用戶帶寬和服務器資源。