NSURLSession跟踪多个获取请求?

时间:2014-02-23 19:29:22

标签: ios nsurlconnection nsurlsession

我曾经用NSURLConnection做我想做的事。

  • 我会创建一个新的自定义NSOperation对象
  • 设置我的NSMutalbeRequest,当准备好触发时,operation女巫将排队操作......
  • 在那里我会使用NSURLConnection delegate方法,我可以跟踪所有进度,完成,错误等...

所以,关键是,请求将包含在自己的operation中,delegate调用将在那里发生,在请求操作对象之间具有1对1的关系以及NSURLConnection delegate

我不确定如何使用NSURLSession执行此操作。使用NSURLSession我可以触发我想要执行的所有GET调用所需的所有dataTasks。 但是,我使用此调用设置了共享会话:

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id <NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue;

所以我想解决的问题是如果我只有一个发生所有委托调用的对象,我如何跟踪多个GET请求进度?那里我只有一个代表。所以现在我有1个会话,1个委托对象,但我同时发生了多个GET请求。

我知道每个任务都有一个“taskIdentifier”,但这要求我有一些字典。

例如当委托致电时:

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

被调用,然后我必须在字典中查找任务,然后我从字典中获得的对象可以引用我需要跟踪那个请求的进度... < / p>

我不确定解决这个问题的最佳方法是什么?有人知道应该怎么做吗?

3 个答案:

答案 0 :(得分:0)

基本上您需要为每个请求设置辅助功能标签

    for task 1

    [dataTask setAccessibilityLabel:@"label1"];

    for task 2

    [dataTask setAccessibilityLabel:@"label2"];

然后在委托方法中检查辅助功能标签

    if([dataTask.accessibilityLabel  isEqual: @"label1"])
     {
        // handle data from first task

     }

     if([dataTask.accessibilityLabel  isEqual: @"label2"])
     {
       // handle data from second task

     }

答案 1 :(得分:0)

您还可以使用自己的NSURLRequest子类来实例化NSURLSessionDataTask,您可以从会话委托中的task.originalRequest中检索它。

答案 2 :(得分:-2)

所以,

到目前为止,对我来说最有效的方法是使用NSDictionary方法。这允许NSURLSession委托获得正确的数据任务并一次处理多个请求。

我不确定这是否是最佳方法,但我的应用程序现在正在运行大量请求,而且事情似乎正常。