记录iOS偶发崩溃问题

2019-03-14  本文已影响0人  Rumbles

点击TableView. 偶发崩溃。原因是数据清空了

以前代码:

- (void)reloadDataWithVsid:(NSString*)vsid {
    if ([CNCboxTools isBlankString:vsid]) return;
    
    _strVsid = vsid;
    
    [self.xuanJiArr removeAllObjects];
    [self.jingXuanArr removeAllObjects];
    [self.jingCaiArr removeAllObjects];
    [self.latestArr removeAllObjects];
    
    dispatch_group_enter(self.group);
    @weakify(self);
    [CNCboxVideoSever getXuanJiOrJingXuanWithVsid:vsid isXuanJi:YES page:1 number:PageNumber finish:^(CNCboxVideoSetListModel *model, BOOL isSuccess) {
        @strongify(self); if (!self) return;
        if (isSuccess) {
            self.xuanJiArr = [CNCboxTools getSafeArray:model.video].mutableCopy;            if (model.videoSetFirstModel) self.headerModel = model.videoSetFirstModel;
            [CNCboxVideoSever getJingCaiKanDianWithRelvsid:model.videoSetFirstModel.relvsid finish:^(CNCboxVideoSetListModel *model, BOOL isSuccess) {
                dispatch_group_leave(self.group);
                if (isSuccess) self.jingCaiArr = [CNCboxTools getSafeArray:model.video].mutableCopy;
            }];
        } else {
            dispatch_group_leave(self.group);
        }
    }];
    
    dispatch_group_enter(self.group);
    [CNCboxVideoSever getXuanJiOrJingXuanWithVsid:vsid isXuanJi:NO page:1 number:PageNumber finish:^(CNCboxVideoSetListModel *model, BOOL isSuccess) {
        @strongify(self); if (!self) return;
        dispatch_group_leave(self.group);
        if (isSuccess) self.jingXuanArr = [CNCboxTools getSafeArray:model.video].mutableCopy;
    }];
        
    dispatch_group_enter(self.group);
    [CNCboxHttpServerHelper httpRequestUrl:CNCboxURLByTag(latest_content_url) andMethod:HTTP_GET andRequestQueue:nil andParamters:nil andFinishBlock:^(id resultData, BOOL isError) {
        @strongify(self); if (!self) return;
        dispatch_group_leave(self.group);
        if ([resultData isKindOfClass:[NSDictionary class]]) {
            NSArray *dataArr = [CNCboxTools getSafeArray:resultData[@"data"]];
            for (NSInteger i = 0; i < dataArr.count; i++) {
                VideoSetModel *model = [VideoSetModel modelWithJSON:dataArr[i]];
                [self.latestArr addObject:model];
            }
        }
    }];
    
    dispatch_group_notify(self.group, dispatch_get_main_queue(), ^{
        @strongify(self); if (!self) return;
        [self dealData];
        if (self.headerModel) {
            self.headerView.headerModel = self.headerModel;
        } else {
            self.headerView = nil;
            self.m_tableView.tableHeaderView = nil;
        }
        NSLog(@"m_tableView  reloadData %s   %d",__func__,__LINE__);

        [self.m_tableView reloadData];
        
        ///>  如果没有给vid那么就播放选集或者精选第一条
        if (self.selectDelegate && [self.selectDelegate respondsToSelector:@selector(dianboViewXuanJiOrJingXuanFirstModel:)] &&
            [CNCboxTools isBlankString:self.vid]) {
            if (self.xuanJiArr.count > 0) {
                VideoSetModel *model = self.xuanJiArr[0];
                self.vid = model.vid;
                [self.selectDelegate dianboViewXuanJiOrJingXuanFirstModel:model];
            } else if (self.jingXuanArr.count > 0) {
                VideoSetModel *model = self.jingXuanArr[0];
                self.vid = model.vid;
                [self.selectDelegate dianboViewXuanJiOrJingXuanFirstModel:model];
            }
        }
        [self selectItemWithVid:self.vid];

        [CNCboxHUD dismiss];
    });
}

崩溃发生在 清除数据。和 多线程请求数据之间。 当点击过多的时候或者网络不好的时候会出现清除数据了。然后刷新tableview 这时候就回崩溃

修改代码:

- (void)reloadDataWithVsid:(NSString*)vsid {
    if ([CNCboxTools isBlankString:vsid]) return;
    
    _strVsid = vsid;
    
    __block NSMutableArray *tempXuanJiArr = [NSMutableArray array];
    __block NSMutableArray *tempJingXuanArr = [NSMutableArray array];
    __block NSMutableArray *tempJingCaiArr = [NSMutableArray array];
    __block NSMutableArray *tempLatestArr = [NSMutableArray array];
    
    dispatch_group_enter(self.group);
    @weakify(self);
    [CNCboxVideoSever getXuanJiOrJingXuanWithVsid:vsid isXuanJi:YES page:1 number:PageNumber finish:^(CNCboxVideoSetListModel *model, BOOL isSuccess) {
        @strongify(self); if (!self) return;
        if (isSuccess) {
            tempXuanJiArr = [CNCboxTools getSafeArray:model.video].mutableCopy;
            if (model.videoSetFirstModel) self.headerModel = model.videoSetFirstModel;
            [CNCboxVideoSever getJingCaiKanDianWithRelvsid:model.videoSetFirstModel.relvsid finish:^(CNCboxVideoSetListModel *model, BOOL isSuccess) {
                dispatch_group_leave(self.group);
                if (isSuccess) tempJingCaiArr = [CNCboxTools getSafeArray:model.video].mutableCopy;
            }];
        } else {
            dispatch_group_leave(self.group);
        }
    }];
    
    dispatch_group_enter(self.group);
    [CNCboxVideoSever getXuanJiOrJingXuanWithVsid:vsid isXuanJi:NO page:1 number:PageNumber finish:^(CNCboxVideoSetListModel *model, BOOL isSuccess) {
        @strongify(self); if (!self) return;
        dispatch_group_leave(self.group);
        if (isSuccess) tempJingXuanArr = [CNCboxTools getSafeArray:model.video].mutableCopy;
    }];
        
    dispatch_group_enter(self.group);
    [CNCboxHttpServerHelper httpRequestUrl:CNCboxURLByTag(latest_content_url) andMethod:HTTP_GET andRequestQueue:nil andParamters:nil andFinishBlock:^(id resultData, BOOL isError) {
        @strongify(self); if (!self) return;
        dispatch_group_leave(self.group);
        if ([resultData isKindOfClass:[NSDictionary class]]) {
            NSArray *dataArr = [CNCboxTools getSafeArray:resultData[@"data"]];
            for (NSInteger i = 0; i < dataArr.count; i++) {
                VideoSetModel *model = [VideoSetModel modelWithJSON:dataArr[i]];
                [tempLatestArr addObject:model];
            }
        }
    }];
    
    dispatch_group_notify(self.group, dispatch_get_main_queue(), ^{
        @strongify(self); if (!self) return;
        
        [self.xuanJiArr removeAllObjects];
        [self.jingXuanArr removeAllObjects];
        [self.jingCaiArr removeAllObjects];
        [self.latestArr removeAllObjects];
        
        self.xuanJiArr = tempXuanJiArr;
        self.jingXuanArr = tempJingXuanArr;
        self.jingCaiArr = tempJingCaiArr;
        self.latestArr = tempLatestArr;

        [self dealData];
        if (self.headerModel) {
            self.headerView.headerModel = self.headerModel;
        } else {
            self.headerView = nil;
            self.m_tableView.tableHeaderView = nil;
        }
        NSLog(@"m_tableView  reloadData %s   %d",__func__,__LINE__);

        [self.m_tableView reloadData];
        
        ///>  如果没有给vid那么就播放选集或者精选第一条
        if (self.selectDelegate && [self.selectDelegate respondsToSelector:@selector(dianboViewXuanJiOrJingXuanFirstModel:)] &&
            [CNCboxTools isBlankString:self.vid]) {
            if (self.xuanJiArr.count > 0) {
                VideoSetModel *model = self.xuanJiArr[0];
                self.vid = model.vid;
                [self.selectDelegate dianboViewXuanJiOrJingXuanFirstModel:model];
            } else if (self.jingXuanArr.count > 0) {
                VideoSetModel *model = self.jingXuanArr[0];
                self.vid = model.vid;
                [self.selectDelegate dianboViewXuanJiOrJingXuanFirstModel:model];
            }
        }
        [self selectItemWithVid:self.vid];

        [CNCboxHUD dismiss];
    });
}
上一篇 下一篇

猜你喜欢

热点阅读