gpt4 book ai didi

ios - 如何制作一个组织多个 NSURLSessionDataTask (s) 的函数?

转载 作者:行者123 更新时间:2023-12-01 16:41:40 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




创建 NSURLSession 后,使用 NSURLSessionDataTask 进行多个 Web 查询似乎会导致一些代码编写冗余,我想清理一下。以下代码重复多次:

NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
[task resume];

可以从专用功能内部启动任务吗?将 NSMutableURLRequest 作为变量传递很容易,但是完成处理程序呢?

从理论上讲,您可以将完成处理程序作为一个 block 传递,对吗?我遇到的问题是不能从提供的完成处理程序之外引用回调变量(数据和响应),那么如何编写引用它们的 block 呢?

现在我有 3 或 4 个单独编写的任务,看起来它可能会保持这种状态,除非有人有想法!

编辑,解决方案:

方法定义为:
- (void) engage:(NSMutableURLRequest *)request with:(void (^)(NSData *, NSURLResponse *, NSError *))yourmom;

& 它采用的 block 文字如下所示:
void (^yourmom)(NSData *, NSURLResponse *, NSError *) = ^(NSData *data, NSURLResponse *response, NSError *error) {
// stuff
};

基本上,我缺少的关键是我需要我的 block 来接受变量,以便我可以按名称引用它们而不会出现编译器错误。上面的代码创建了一个变量接受 block ,它可以让我绕过编译器关于超出范围变量的警告。另外,如果代码
[自我参与:请求:你妈妈];
出现在某个我们会知道它来自哪里的地方。

最佳答案

如果您问如何将完成 block 传递给实用程序方法,您应该为您的方法提供一个 block 参数:

- (NSURLSessionDataTask *)startDataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))block
{
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:block];
[task resume];

return task;
}

或者,如果您一直在重复完成 block 的某些部分,那么继续并将其放入您的实用程序方法中,然后调用调用者的 block :
- (NSURLSessionDataTask *)startDataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))block
{
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
// do here stuff that I'll always do, such as logging errors, checking response codes, etc.

// when that's done, I can now invoke the caller's block

if (block) {
block(data, response, error);
}
}];
[task resume];

return task;
}

关于ios - 如何制作一个组织多个 NSURLSessionDataTask (s) 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23817545/

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