美文网首页
记录iOS偶发崩溃问题

记录iOS偶发崩溃问题

作者: Rumbles | 来源:发表于2019-03-14 17:19 被阅读0次

点击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];
    });
}

相关文章

  • 记录iOS偶发崩溃问题

    点击TableView. 偶发崩溃。原因是数据清空了 以前代码: 崩溃发生在 清除数据。和 多线程请求数据之间。 ...

  • iOS偶发崩溃

    某软件公司的一天上午,测试妹子来到开发面前 测试妹子:刚才程序崩溃了 开发:怎么崩溃的?? 测试妹子:不知道啊,就...

  • CALayer renderInContext: Crash

    记录一个问题, CALayer renderInContext: 在 iOS 8 或者 iOS9 上可能会导致崩溃...

  • 记录一次Skia JNI 库的崩溃

    发现问题 在白板应用中发现出现偶发的崩溃, 堆栈上看,崩溃发生在skia native层,但是问题原因未知 问题代...

  • WCDBSwift getObjects 偶发性崩溃解决

    WCDB getObjects偶发性崩溃解决 引入WCDBSwift 后, 运行时偶发崩溃, 经过手动前往路径删除...

  • BSPanoramaView 使用日记

    展示VR全景图,源码使用异步加载,实际使用时偶发崩溃,无法展示等问题。改为同步加载后暂未发现崩溃问题。 - (vo...

  • RenderThread SIGSEGV(SEGV_MAPERR

    问题背景:使用 Google 提供的 Camera2 的 Demo 时,app 会出现偶发性的崩溃,RenderT...

  • iOS 9上真机测试随机崩溃 线上崩溃日子SIGSEGV

    SIGSEGV崩溃 现象:iOS 9.1上真机测试随机崩溃。模拟器和iOS 10以上没有问题 原因:图标格式问题,...

  • # iOS进阶 # 崩溃与日志分析

    在iOS开发中经常需要靠记录日志来调试应用程序、解决崩溃问题等,整理常用的日志输出和崩溃日志分析。最新更新:201...

  • iOS 崩溃记录

    1、语法糖nil的情况。如果imageUrl的value为nil,会crash 2、连续presentViewCo...

网友评论

      本文标题:记录iOS偶发崩溃问题

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