我正在使用NSURLSession
進行服務器通信。我有2個課程分別下載和上傳文件。我想使用單一NSURLSession
進行下載和上傳操作。在這種情況下,我不能在運行時通過使用setDelegate
選項更改NSURLSession
的委託,因爲我使用委託來驗證數據。有沒有辦法在運行時更改NSURLSession的委託對象?如何將代理更改爲NSURLSession
感謝。
我正在使用NSURLSession
進行服務器通信。我有2個課程分別下載和上傳文件。我想使用單一NSURLSession
進行下載和上傳操作。在這種情況下,我不能在運行時通過使用setDelegate
選項更改NSURLSession
的委託,因爲我使用委託來驗證數據。有沒有辦法在運行時更改NSURLSession的委託對象?如何將代理更改爲NSURLSession
感謝。
delegate
無法更改。這是「在創建該對象時分配的代表」。隨着the documentation接着說:
注:
這
delegate
對象必須在創建對象的時候設定,可以不被改變。
所以,你必須設計一個代理對象,可以區分你的各種網絡任務,適當地處理每個任務。
理論上,您可以創建單獨的委託對象,並維護由任務標識符鍵入的指向輔助委託對象的指針的字典。然後,您可以編寫NSURLSession
的委託,對於任務委託方法,在其字典中查找任務標識,在相應的委託對象中調用適當的方法。但這有點不雅,所以你應該停下來問問自己是否有更簡單的方法來解決問題。
正如Rob所說,你不能改變NSURLSession的委託。
您還有其他選擇。
您可以設置下載管理器對象(可能是單身),其 管理NSURLSession,是它的代表,並將其轉發到任何對象要求上載或下載 消息。
您可以創建NSURSession的多個實例,其中一個用於上傳 ,另一個用於下載,每個實例都有一個單獨的代理。 (你說你 不想這樣做,但你應該重新考慮這個選項。
可以使用NSURLSession
方法是通過完成處理 而不是使用一個代理..
你可以做的是引入第三個委託,並在它們的URLSessionDelegate委託方法被調用時從這兩個類中調用它的方法。 –
「Singleton」的使用可以幫助 – iphonic
「我想使用Single NSURLSession進行下載和上傳操作」爲什麼?不同的代表正是爲什麼你會使用多個NSURLSessions。 – matt