众所周知,融云即时通讯,是当下比较流行的即时通讯开源框架,它在不管是性能上还是实用上都很棒真的棒,所以很多公司在使用即时通讯上都用了融云,可能大家都遇到了一个问题,就是融云的头像显示问题,头像显示在信息列表上还有聊天界面都有,融云给出了文档,说的还是比较详细,是有一个这个代理方法
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion
然后在代理方法里面办事情就行了,但是可能就是好多朋友用的时候总是不显示,或者说请求到数据得到的太慢,不要慌 我这里有一个方法,可能性能方面我没有考虑昂,不过很实用;下面是代码
//这里是融云的代理方法
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion{
//这里的Loginuserinfo是我自己的信息 我定义了一个全局存在沙河里面的。
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;
return completion(user);
}
//这里是别人的信息判断我相信大家都可以看的懂
if (![userId isEqualToString:[NSString stringWithFormat:@"%i",LoginUserInfo.userId]]) {
//我在这里实例化了融云的用户信息
_userInfo2=[[RCUserInfo alloc]init];
//我在这里开了一个线程 gcd 相信大家都能看懂 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//我给力一个判断 就是用户不为空的时候再进这个网络请求方法
if (_userInfo2 != nil) {
dispatch_async(dispatch_get_main_queue(), ^{
//我的网络请求方法
[self requestRounHead:userId];
return completion(_userInfo2);
});
}
});
}
return completion(nil);
}
这是在融云代理方法里面的写的代码。写了这里的代码以后基本就完成的差不多了,急性子的人喜欢马上显示出头像,说的好听点就是为了增加用户体验 ok, 下面关键
//这两句代码是我在网络请求结束的时候写的
//第一句是更新了用户的信息
[[RCIM sharedRCIM]refreshUserInfoCache:_userInfo2 withUserId:userId];
//我发这个通知就是强制刷新了融云的信息列表 写完之后大功告成
[[NSNotificationCenter defaultCenter]postNotificationName:@"刷新列表谢谢" object:nil];
希望对大家有所帮助