点击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];
});
}
网友评论