上一个博文里面说了融云头像问题,那个是没有经过测试的,我这边测试了以后确实是有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 有啥不懂的再问我,融云可以引用此帖 哈哈哈