如何将委托更改为NSURLSession

时间:2016-12-26 18:45:36

标签: ios objective-c iphone delegates nsurlsession

我正在使用NSURLSession进行服务器通信。我有2个单独的类用于下载和上传文件。我想使用单NSURLSession进行下载和上传操作。因此,我无法在运行时使用NSURLSession选项更改setDelegate的委托,因为我使用委托来验证数据。有没有办法在运行时更改NSURLSession的委托对象?

感谢。

2 个答案:

答案 0 :(得分:2)

delegate无法更改。它是“创建此对象时分配的委托”。正如the documentation继续说:

  

注意:

     

delegate对象必须在创建对象时设置,并且不能更改。

因此,您必须设计一个委托对象,该对象可以区分您的各种网络任务,并适当地处理每个任务。

理论上,您可以创建单独的委托对象,并维护由任务标识符键入的字典,指向辅助委托对象的指针。然后,您可以为NSURLSession编写一个委托,对于任务委托方法,在其字典中查找任务标识符,在相应的委托对象中调用适当的方法。但这有点不优雅,所以你应该停下来问自己是否有更简单的方法来解决这个问题。

答案 1 :(得分:2)

正如Rob所说,你无法改变NSURLSession的代表。

您还有其他一些选择。

  • 您可以设置下载管理器对象(可能是单例) 管理NSURLSession并且是它的代表,并将其推进 消息到请求上传或下载的任何对象。

  • 您可以创建NSURSession的多个实例,一个用于上传 和一个下载,每个都有一个单独的代表。 (你说过你 不想这样做,但你应该重新审视这个选项。

  • 您可以使用传递完成处理程序的NSURLSession方法 而不是使用代表..