美文网首页ios基础知识Des's iOS
AFNetworking 怎么取消网络请求

AFNetworking 怎么取消网络请求

作者: Crazy2015 | 来源:发表于2016-04-17 11:14 被阅读6324次
    拿到 NSOperation取消单个网络请求,operation 直接取消:[operation cancel];

    用get函数作为例子来说明怎么取消当前的网络请求
    ++ (AFHTTPRequestOperation *)getJSONDataWithUrlPath:(NSString *)url_path parameters:(id)parameters success:(void (^)(id json))success fail:(void (^)())fail { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSString* urlStr = [NSString stringWithFormat:@"%@%@", IP_STR, url_path]; __block AFHTTPRequestOperation* http_operation; AFHTTPRequestOperation* operation = [manager GET:urlStr parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { if (success) { http_operation = operation; success(responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"请求失败,错误信息:error==%@", error); if (fail) { http_operation = operation; fail(); } }]; return operation; }

    取消所有的 operation --
    [[MGJRequestManager sharedInstance] cancelAllRequest];
    - (void)cancelAllRequest
    {
        [self.requestManager.operationQueue cancelAllOperations];
    }
    
    取消某个URL的请求
    - (void)cancelHTTPOperationsWithMethod:(NSString *)method url:(NSString *)url
    {
        NSError *error;
        
        NSString *pathToBeMatched = [[[self.requestManager.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:url] absoluteString] parameters:nil error:&error] URL] path];
        
        for (NSOperation *operation in [self.requestManager.operationQueue operations]) {
            if (![operation isKindOfClass:[AFHTTPRequestOperation class]]) {
                continue;
            }
            BOOL hasMatchingMethod = !method || [method  isEqualToString:[[(AFHTTPRequestOperation *)operation request] HTTPMethod]];
            BOOL hasMatchingPath = [[[[(AFHTTPRequestOperation *)operation request] URL] path] isEqual:pathToBeMatched];
            
            if (hasMatchingMethod && hasMatchingPath) {
                [operation cancel];
            }
        }
    }
    

    相关文章

      网友评论

      • hhgvg:post请求返回的数据存在本地 然后刷新tableview上的cell 怎么实现
      • 千若逸:不要直接用[AFHTTPRequestOperationManager manager],这个是每次都会创建一个全新的manager,被坑哭了。。。。
      • 看个客人:你好,有个问题请教一下,我现在在做表的预加载功能,当我滑到当前页的70%,就会预加载下一页,但是有可能滑动速度太快,上一个请求没结束,就触动了上啦刷新。这个怎么办,我想的是在上啦刷新里面判断请求状态,还是怎么办?
        二营长意大利炮呢:给你推荐Facebook的框架,ASyncDisplayKit,简直不要太流畅,太快
        Crazy2015:就是说,你的预加载是通过下拉刷新获得?然后你的操作里面即下拉刷新又上来刷新,然后遇到问题了?
        Crazy2015:没看懂你的预加载是干什么用的?
      • 左左4143:AFNetworking 3.0取消了AFHTTPRequestOperation这个类怎么办呢
        Crazy2015:@消逝彼得 说一下你的场景,这样好分析。
        消逝彼得:@Crazy2015 [task cancel]不能取消,有可能是啥原因呢
        Crazy2015:@Elephan_z

        NSURLSessionDataTask *task = [manager GET:@"url地址"parameters:@"入参"progress:^(NSProgress *_Nonnull downloadProgress) {

        //数据请求进度

        } success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {

        //请求成功


        } failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {

        //请求失败

        }];

        //取消单个网络请求
        [task cancel];

        //取消所有的网络请求
        [manager.operationQueue cancelAllOperations];
      • 8bfca968135d:post请求url都一样怎么根据参数取消?

      本文标题:AFNetworking 怎么取消网络请求

      本文链接:https://www.haomeiwen.com/subject/nlyolttx.html