ios - 在拦截的完成处理程序中获取 NSURLSessionDataTask

标签 ios afnetworking

我正在使用 AFNetworking 并且我正在覆盖 -dataTaskWithRequest:completionHandler: 以基本上 MITM 我的请求并在调用实际响应 block 之前进行一些错误处理。但是,我需要在截获的完成处理程序中访问 -dataTaskWithRequest:completionHandler: 方法创建的 NSURLSessionDataTask 对象。所以我对该方法的重写如下所示:

-(NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *, id, NSError *))completionHandler {

    void (^interceptedCompletionHandler)(NSURLResponse *, id, NSError *) = ^void(NSURLResponse * response, id responseObject, NSError * error) {
        if (error) {
            // Do custom stuff here that needs to use task.taskIdentifier
        }

        // Then call the original completion handler
        completionHandler(response, responseObject, error);

    }

    return [super dataTaskWithRequest:request completionHandler:interceptedCompletionHandler];
}

这可能吗?

我知道 AFNetworking 可以很容易地添加它,因为完成处理程序的响应参数在 AFURLSessionManager 中设置为 task.response,它是包含-URLSession:task:didCompleteWithError: 调用完成处理程序。

最佳答案

我想通了。通过声明 block 内联并将 super 调用分配给一个变量,我能够使用生成的任务对象:

-(NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *, id, NSError *))completionHandler {

    __block NSURLSessionDataTask* task = [super dataTaskWithRequest:request completionHandler:
                                      ^void(NSURLResponse * response, id responseObject, NSError * error)
    {
        // I can use task here
        if (error) {
            // Do custom stuff here that needs to use task.taskIdentifier
        }

        // Then call the original completion handler
        completionHandler(response, responseObject, error);

    }

    return task;
}

关于ios - 在拦截的完成处理程序中获取 NSURLSessionDataTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27800587/

相关文章:

ios - 无法使用 Forecastr 包装器的 JSON 结果

ios - iPhone 应用程序编程中网络调用请求/响应的最佳实践

c++ - NodeJS/iOS - 如何在使用 HTTP POST 调用后从二进制文件中获取返回值

ios - AFNetworking 3.0 AFURLResponseSerialization 缺失

ios - 动画 UIView 向下滑动,然后向上滑动

ios - 无法将我的应用程序上传到应用程序商店

ios - swift 中的 For 循环似乎随机选择增量

ios - 在操作表中添加 UIPickerView 和一个按钮 - 如何?

ios - cocoa pod 依赖管理

objective-c - 使用尚未呈现的实时数据更新 View ,ios