iOS-Main Thread Checker: UI API called on a background thread

正文

在开发的过程中遇到一个警告问题,截图如下:


经查阅资料得知,这是Xcode9的一个新特性,即= 主线程检测器(Main Thread Checker) =,出现这个警告意味着你把主线程的代码放到子线程里面了。

修改如下:

原警告代码

#pragma mark - RCIMGroupInfoDataSource
#pragma mark - 群组
- (void)getGroupInfoWithGroupId:(NSString *)groupId completion:(void (^)(RCGroup *))completion{
    if(groupId != nil && groupId.length > 0){
        WEAKBLOCK;
        //拿到ID先从本地数据库查找,没有的话再从网络上请求。
        //保险起见,先确定一下数据库中有没有这张表
        [ZFJSqliteKit createTableWithtableName:KUserInforTable fieldNameModel:[RongYunChatUserInfor new]];
        //数据库中有个人信息表,查找缓存的个人信息
        NSDictionary *parameter = @{@"mid":groupId};
        [ZFJSqliteKit selectAllDataBaseWithtableName:KUserInforTable byParameter:parameter selectType:KAndType completed:^(NSArray *resultArr, NSString *meg) {
            //已有缓存,直接加载
            NSDictionary *dict = [resultArr firstObject];
            NSString *groupId = [dict objectForKey:@"mid"];
            NSString *groupName = [dict objectForKey:@"name"];
            NSString *groupImg = [dict objectForKey:@"portraitUri"];
            RCGroup *group = [[RCGroup alloc]initWithGroupId:groupId groupName:groupName portraitUri:groupImg];
            [weakSelf.groupInfosArr addObject:group];
            [weakSelf.conversationListTableView reloadData];
            if(completion){
                completion(group);
            }
        }];
    }
}

修改后的代码

#pragma mark - RCIMGroupInfoDataSource
#pragma mark - 群组
- (void)getGroupInfoWithGroupId:(NSString *)groupId completion:(void (^)(RCGroup *))completion{
    if(groupId != nil && groupId.length > 0){
        WEAKBLOCK;
        //拿到ID先从本地数据库查找,没有的话再从网络上请求。
        //保险起见,先确定一下数据库中有没有这张表
        [ZFJSqliteKit createTableWithtableName:KUserInforTable fieldNameModel:[RongYunChatUserInfor new]];
        //数据库中有个人信息表,查找缓存的个人信息
        NSDictionary *parameter = @{@"mid":groupId};
        [ZFJSqliteKit selectAllDataBaseWithtableName:KUserInforTable byParameter:parameter selectType:KAndType completed:^(NSArray *resultArr, NSString *meg) {
            //已有缓存,直接加载
            NSDictionary *dict = [resultArr firstObject];
            NSString *groupId = [dict objectForKey:@"mid"];
            NSString *groupName = [dict objectForKey:@"name"];
            NSString *groupImg = [dict objectForKey:@"portraitUri"];
            RCGroup *group = [[RCGroup alloc]initWithGroupId:groupId groupName:groupName portraitUri:groupImg];
            [weakSelf.groupInfosArr addObject:group];
            dispatch_async(dispatch_get_main_queue(), ^{
                [weakSelf.conversationListTableView reloadData];
            });
            if(completion){
                completion(group);
            }
        }];
    }
}

主要把我的[weakSelf.conversationListTableView reloadData];放到主线程里面。

结束语

欢迎各位大神补充!

欢迎大家加移动开发技术交流群,在这里大家可以一起讨论学习,这里有大佬,也有小菜鸟,没事还能斗斗图装装逼,如果需要换工作的还能相互推荐,期待大家的加入!



猜你喜欢

转载自blog.csdn.net/u014220518/article/details/80223328
今日推荐