我正在使用NSURLSession
进行服务器通信。我有2个单独的类用于下载和上传文件。我想使用单NSURLSession
进行下载和上传操作。因此,我无法在运行时使用NSURLSession
选项更改setDelegate
的委托,因为我使用委托来验证数据。有没有办法在运行时更改NSURLSession的委托对象?
感谢。
答案 0 :(得分:2)
delegate
无法更改。它是“创建此对象时分配的委托”。正如the documentation继续说:
注意:强>
此
delegate
对象必须在创建对象时设置,并且不能更改。
因此,您必须设计一个委托对象,该对象可以区分您的各种网络任务,并适当地处理每个任务。
理论上,您可以创建单独的委托对象,并维护由任务标识符键入的字典,指向辅助委托对象的指针。然后,您可以为NSURLSession
编写一个委托,对于任务委托方法,在其字典中查找任务标识符,在相应的委托对象中调用适当的方法。但这有点不优雅,所以你应该停下来问自己是否有更简单的方法来解决这个问题。
答案 1 :(得分:2)
正如Rob所说,你无法改变NSURLSession的代表。
您还有其他一些选择。
您可以设置下载管理器对象(可能是单例) 管理NSURLSession并且是它的代表,并将其推进 消息到请求上传或下载的任何对象。
您可以创建NSURSession的多个实例,一个用于上传 和一个下载,每个都有一个单独的代表。 (你说过你 不想这样做,但你应该重新审视这个选项。
您可以使用传递完成处理程序的NSURLSession
方法
而不是使用代表..