gpt4 book ai didi

ios - 如何聚合来自多个 NSURLSessionDataTasks 的响应?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:16 27 4
gpt4 key购买 nike

我正在尝试从将同时运行的多个 NSURLSessionDataTasks 中聚合数据。

__block NSMutableDictionary *languageDetails = [NSMutableDictionary new];
[repos enumerateObjectsUsingBlock:^(NSDictionary *repoDict, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *languageUrl = repoDict[@"languages_url"];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:languageUrl]
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// JSON Parse response
// Update languageDetails
}];
[task resume];
}];

如何使用在所有数据任务完成后调用的主回调或委托(delegate)进行设置?

最佳答案

您可以使用调度组来监听所有调用何时结束:

dispatch_group_t tasks = dispatch_group_create();

__block NSMutableDictionary *languageDetails = [NSMutableDictionary new];
[repos enumerateObjectsUsingBlock:^(NSDictionary *repoDict, NSUInteger idx, BOOL * _Nonnull stop) {
dispatch_group_enter(tasks);

NSString *languageUrl = repoDict[@"languages_url"];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:languageUrl]
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// JSON Parse response
// Update languageDetails

dispatch_group_leave(tasks);
}];
[task resume];
}];

dispatch_group_notify(tasks, dispatch_get_main_queue(), ^{
// All the tasks are done, do whatever
});

在每个 dispatch_group_enter 都有一个 dispatch_group_leave 调用之前,通知 block 不会运行

关于ios - 如何聚合来自多个 NSURLSessionDataTasks 的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com