2014-02-23 96 views
1

我以前用NSURLConnection做我想做的事。NSURLSession跟蹤多個獲取請求?

  • 我將創建一個新的自定義NSOperation對象
  • 設置我NSMutalbeRequest,當準備觸發operation巫婆排隊的操作......在那裏
  • 我將有NSURLConnectiondelegate方法,並與我可以跟蹤所有的進展,完成,錯誤等...

所以,問題是,請求將被包含在它自己operationdelegate電話會發生在那裏,在請求操作對象與NSURLConnection delegate之間具有1對1的關係。

我不確定如何使用NSURLSession來做到這一點。通過NSURLSession,我可以觸發我想要執行的所有GET調用所需的所有dataTasks。

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id <NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue; 

所以我試圖解決的問題是我怎麼能跟蹤多個GET請求進步,如果我只有一個目標,所有的委託調用發生: 但是我設置了使用此調用共享會議?我只有一個代表在那裏。所以現在我有1個會話,1個委託對象,但我有多個GET請求同時發生。

我知道每個任務都有一個「taskIdentifier」,但這需要我有某種字典。

例如,當委託調用:

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data 

被調用,那麼我要回去看看任務在一本字典,然後我會從字典中獲取對象能有參考我需要跟蹤一個請求的進度...

我不確定解決此問題的最佳方法是什麼?有人知道這應該怎麼辦?

+0

你的字典解決方案聽起來沒問題。你認爲什麼樣的追蹤/情況會成爲問題? – Wain

+0

你說的方式正是你所要做的,因爲每個數據任務都需要附加到它自己的可變數據上。 – matt

+0

可能的重複[如何從完成的\ NSURLSessionDataTask中獲取數據?](http://stackoverflow.com/questions/21924483/how-do-i-get-the-data-from-a- finished-nsurlsessiondatatask) – matt

回答

-2

因此,

到目前爲止,對我來說最合適的是使用NSDictionary方法。這允許NSURLSession委託獲得正確的數據任務,並一次處理多個請求。

我不確定這是否是最好的方法,但我的應用程序現在正在運行大量的請求,並且事情似乎正常工作。

+3

:你可以分享這個實現的代碼。 – user694688

+1

也想看到這個實現.. – katit

0

基本上你需要做的是設置可訪問標籤爲每個請求

for task 1 

    [dataTask setAccessibilityLabel:@"label1"]; 

    for task 2 

    [dataTask setAccessibilityLabel:@"label2"]; 

,然後在委託方法檢查可訪問性標籤

if([dataTask.accessibilityLabel isEqual: @"label1"]) 
    { 
     // handle data from first task 

    } 

    if([dataTask.accessibilityLabel isEqual: @"label2"]) 
    { 
     // handle data from second task 

    } 
0

你也可以用你自己的子類實例化NSURLSessionDataTask什麼NSURLRequest,您可以從會話委託中的task.originalRequest中檢索。

+0

我喜歡這個想法,它對NSURLRequest非常有用。但是,我嘗試了一個NSMutableURLRequest,並失敗了。將task.originalRequest轉換爲我的子類後,它在NSMutableURLRequest上以未知方法中止。 – user1055568