2016-12-26 29 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方法是通过完成处理 而不是使用一个代理..