iOS开发解决使用融云sdk融云头像问题第二版 (终结了 完美)

来源:互联网 发布:万国数据是干嘛的 编辑:程序博客网 时间:2024/05/21 06:56
上一个博文里面说了融云头像问题,那个是没有经过测试的,我这边测试了以后确实是有bug,经过我三个小时的修改,ok已经完成了,下面给大家贴源码也把逻辑给捋一下;
**这个是融云的代理方法吧大家肯定知道**- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion{**在这里我给的判断,判断是自己还是其他人**    if ([userId isEqualToString:[NSString stringWithFormat:@"%i",LoginUserInfo.userId]]) {        RCUserInfo *user = [[RCUserInfo alloc]init];        user.userId=[NSString stringWithFormat:@"%i",LoginUserInfo.userId];        user.name=LoginUserInfo.userName;        user.portraitUri=LoginUserInfo.userAvata;        completion(user);        return;    }else{ //**这里的线程开不开都无所谓,我贱我就顺手开了一下**       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{            dispatch_async(dispatch_get_main_queue(), ^{                //**添加任务到队列中,就可以执行任务**                //**异步函数:具备开启新线程的能力**                //url  我就不解释了                NSString*str=[NSString stringWithFormat:@"%@/pilot/getBriefUser",REQUESTURL];                //创建参数字符串对象                **下面那个request什么的其实就是传参数,因为是protrobuf文件  所以这个套路 不用管 也不用看 这不是重点**                Request10018*request10018=[[Request10018 alloc]init];                request10018.common.userid=LoginUserInfo.userId;                request10018.common.userkey=LoginUserInfo.userKey;                request10018.common.cmdid=10018;                request10018.common. timestamp=[[NSDate date]timeIntervalSince1970];                request10018.common.platform=2;                request10018.common.version=sportVersion;                request10018.params.userId=[userId intValue];                NSLog(@"%i",[userId intValue]);                NSData*data2=[request10018 data];                //**注意了这里是我的网络请求方法**                [SendInternet httpNsynchronousRequestUrl:str postStr:data2 finshedBlock:^(NSData *dataString) {                //**这是我判断是否返回成功**                    if (response10018.common.code==0) {                        response10018=[Response10018 parseFromData:dataString error:nil];                        //这里是我实例化了一个RCUserInfo对像,这个对象也是赋值的关键                        //下面三句就是我的赋值了,你按你们的网络请求回调的参数进行赋值                        _userInfo2=[[RCUserInfo alloc]init];                        _userInfo2.userId=[NSString stringWithFormat:@"%i",response10018.data_p.briefUser.userId];                        _userInfo2.name=response10018.data_p.briefUser.userName;                        _userInfo2.portraitUri=response10018.data_p.briefUser.userAvatar;                        NSLog(@"%@",_userInfo2);                    }                    //**这里这里也很关键哦,一定要写上这个判断,要不你的会话列表会很尴尬,你不写试一试,写上试一试。这里就是一个小的判断逻辑,不管我感觉可以应付一切了哈哈哈,这个判断大家也都肯定可以看懂 OK,结束**                    if (_userInfo2) {                        completion(_userInfo2);                    }else{                        completion(nil);                    }                }];            });        });    }}

按照上面的逻辑写,保证你的头像姓名显示一点问题没有。可能有一点问题就是如果你换了头像 你的本地可以及时更新,但是对方可能更新的比较慢,如果想及时,你就可以 使用

 [[RCIM sharedRCIM]clearUserInfoCache];

这个方法是很玄妙的,你可以放到会话列表的viewWillAppear里面
你放进去你自己看看 效果吧,我感觉不是很好,不如你找一个地方放了 ,放到个人信息详情里我感觉更好。你看着放吧,放这句话就是把本地的你获取到的数据给清楚了,再次从新从网络获取就行了。ok 有啥不懂的再问我,融云可以引用此帖 哈哈哈

0 0