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

2018-11-23  本文已影响0人  wg刚
#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];
            }];
        }];
上一篇 下一篇

猜你喜欢

热点阅读