我正在使用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