我曾经用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>
我不确定解决这个问题的最佳方法是什么?有人知道应该怎么做吗?
答案 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委托获得正确的数据任务并一次处理多个请求。我不确定这是否是最佳方法,但我的应用程序现在正在运行大量请求,而且事情似乎正常。