区分NSURLSessions

时间:2017-04-16 09:12:19

标签: objective-c nsurlsession

我有一个视图控制器,有多个方法可以触发NSURLSession。 它们中的每一个都由NSURLDelegate处理,例如

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
    didReceiveData:(NSData *)data

在这种情况下:我如何知道接收数据的结果是什么方法/会话?我需要为每种方法处理不同的接收数据,因为它们都会返回不同的数据。

最好,我会将收到的数据直接反馈到相关方法中。

2 个答案:

答案 0 :(得分:0)

可以直接比较任务。如果您的视图控制器是多个任务的共同委托,那么为每个任务保留weak属性并在委托方法中进行直接比较是完全可以的。

// declare weak taskA and taskB, and assign them:
self.taskA = session.dataTaskWithRequest(...

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
    if dataTask == self.taskA {
        // it's taskA
    } else if dataTask == self.taskB {
        // it's taskB
    }
}

答案 1 :(得分:-1)

创建新的自定义类MyDelegate或其他任何内容。为每个会话实例化此类,并设置“推回”接收数据所需的数据。让它成为会议的代表。

然后每个代理都会获得自己的数据,并可以使用您在实例化时提供的参数将其推送到任何需要的位置。