2016-12-26 73 views
2

我正在使用NSURLSession進行服務器通信。我有2個課程分別下載和上傳文件。我想使用單一NSURLSession進行下載和上傳操作。在這種情況下,我不能在運行時通過使用setDelegate選項更改NSURLSession的委託,因爲我使用委託來驗證數據。有沒有辦法在運行時更改NSURLSession的委託對象?如何將代理更改爲NSURLSession

感謝。

+0

你可以做的是引入第三個委託,並在它們的URLSessionDelegate委託方法被調用時從這兩個類中調用它的方法。 –

+0

「Singleton」的使用可以幫助 – iphonic

+0

「我想使用Single NSURLSession進行下載和上傳操作」爲什麼?不同的代表正是爲什麼你會使用多個NSURLSessions。 – matt

回答

2

delegate無法更改。這是「在創建該對象時分配的代表」。隨着the documentation接着說:

注:

delegate對象必須在創建對象的時候設定,可以不被改變。

所以,你必須設計一個代理對象,可以區分你的各種網絡任務,適當地處理每個任務。

理論上,您可以創建單獨的委託對象,並維護由任務標識符鍵入的指向輔助委託對象的指針的字典。然後,您可以編寫NSURLSession的委託,對於任務委託方法,在其字典中查找任務標識,在相應的委託對象中調用適當的方法。但這有點不雅,所以你應該停下來問問自己是否有更簡單的方法來解決問題。

2

正如Rob所說,你不能改變NSURLSession的委託。

您還有其他選擇。

  • 您可以設置下載管理器對象(可能是單身),其 管理NSURLSession,是它的代表,並將其轉發到任何對象要求上載或下載 消息。

  • 您可以創建NSURSession的多個實例,其中一個用於上傳 ,另一個用於下載,每個實例都有一個單獨的代理。 (你說你 不想這樣做,但你應該重新考慮這個選項。

  • 可以使用NSURLSession方法是通過完成處理 而不是使用一個代理..

相關問題