美文网首页
若干网络请求结束后,刷新UI

若干网络请求结束后,刷新UI

作者: wg刚 | 来源:发表于2018-11-23 17:31 被阅读0次
    #pragma mark -获取网络数据
    - (void)loadNetData{
        
        self.group = dispatch_group_create();
        dispatch_queue_t queue = dispatch_queue_create("com.wg.group", DISPATCH_QUEUE_SERIAL);
        
        dispatch_group_enter(_group);
        dispatch_group_async(_group, queue, ^{
            //网络请求 1111
            [self getStatementCount];
        });
        
        dispatch_group_enter(_group);
        dispatch_group_async(_group, queue, ^{
            //网络请求 2222
            WS(weakSelf);
            [self getHospitalApplyList:^(BOOL isSuccess) {
                //成功与否,都继续
                dispatch_group_leave(weakSelf.group);
            }];
        });
        
        dispatch_group_notify(_group, queue, ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                //刷新UI
            });
        });
    }
    
    这里的网络请求函数,我写两种方案,可根据需求选择

    一、不需要回调,这种请求方式,需要在请求结束后,不管成功或者失败,都需要添加dispatch_group_leave(group);

    //网络请求  1111
    - (void)getStatementCount{
        
        NSDictionary *parm = @{
                               @"platformId":@(2)
                               };
        NSString *funItem = HuDataReport_quarterlyStatementCount;
        
        WS(weakSelf);
        [Request requestGET:parm view:weakSelf.view urlPre:dataReportCollectionURL funItem:funItem success:^(NSDictionary *dic) {
            
            //这里需要添加下面代码
            dispatch_group_leave(weakSelf.group);
            
        } error:^(NSDictionary *dic) {
    
            //这里需要添加下面代码
            dispatch_group_leave(weakSelf.group);
            
        } failure:^{
    
            //这里需要添加下面代码
            dispatch_group_leave(weakSelf.group);
            
        }];
        
    }
    

    二、有时候需要回调

    例如下拉刷新某一部分数据的时候,不需要请求全部的后台接口,只要单独调一个接口函数就行了,但是如果你把dispatch_group_leave(group);写到了函数里面,就会有问题,因为你在刷新之前没有dispatch_group_enter(_group);

    可使用

    //网络请求 2222
    - (void)getHospitalApplyList:(void(^)(BOOL isSuccess))block{
        
        NSDictionary *parm = @{
                               @"platformId":@(2),
                               };
        NSString *funItem = HuDataReport_hospital_list;
        
        WS(weakSelf);
        [Request requestGET:parm view:weakSelf.view urlPre:dataReportCollectionURL funItem:funItem success:^(NSDictionary *dic) {
            
            if (block) {
                block(YES);
            }
            
        } error:^(NSDictionary *dic) {
            if (block) {
                block(NO);
            }
        } failure:^{
            if (block) {
                block(NO);
            }
        }];
    }
    
    这样的时候,在同一调接口时
    dispatch_group_enter(_group);
        dispatch_group_async(_group, queue, ^{
            //查询平台下申请的医院列表
            WS(weakSelf);
            [self getHospitalApplyList:^(BOOL isSuccess) {
                //成功与否,都继续
                dispatch_group_leave(weakSelf.group);
            }];
        });
    
    在下拉刷新时
    _tableView.mj_footer=[MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
                self.pageNum ++;
                WS(weakSelf);
                [self getHospitalApplyList:^(BOOL isSuccess) {
                    [weakSelf.tableView.mj_footer endRefreshing];
                    
                    [weakSelf.tableView reloadSections:[NSIndexSet indexSetWithIndex:2] withRowAnimation:UITableViewRowAnimationAutomatic];
                }];
            }];
    

    相关文章

      网友评论

          本文标题:若干网络请求结束后,刷新UI

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