我是自己創(chuàng)建的數(shù)據(jù)庫保存在本地
//任何消息都會先經(jīng)過這個方法
- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left {
if ([message.objectName isEqualToString:@"RC:CmdMsg"]) {
RCCommandMessage *commandMessage = (RCCommandMessage *)message.content;
NSData *jsonData = [commandMessage.data dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
NSMutableDictionary *dataDictionary = [NSMutableDictionary dictionaryWithDictionary:dict];
[dataDictionary setObject:message.content.senderUserInfo.userId forKey:@"userId"];
[dataDictionary setObject:message.content.senderUserInfo.name forKey:@"name"];
[dataDictionary setObject:message.content.senderUserInfo.portraitUri forKey:@"portraitUri"];
//視頻通話
if ([dict[@"messageType"] isEqualToString:MESSAGETYPE_VIDEOCALL]) {
//視頻語音通話 消息記錄不需要保存在本地
[UserInfo sharedUserInfo].msgType = 3;
[UserInfo sharedUserInfo].vedioUrl = [dataDictionary objectForKey:@"fromVideoUrl"];
dispatch_async(dispatch_get_main_queue(), ^{
[self showVideoView:dataDictionary withString:@"邀請你視頻聊天"];
});
}
//語音通話
if ([dict[@"messageType"] isEqualToString:MESSAGETYPE_VOICECALLS]) {
dispatch_async(dispatch_get_main_queue(), ^{
if([self.window viewWithTag:5555] || [self.window viewWithTag:5556])return;
if([UserInfo sharedUserInfo].yujianta == 34){
[UserInfo sharedUserInfo].msgType = 4;
[UserInfo sharedUserInfo].vedioUrl = @"";
[self showVideoView:dataDictionary withString:@"邀請你語音聊天"];
}
});
}
} else {
//更新未讀數(shù)
dispatch_async(dispatch_get_main_queue(), ^{
[self setupUnreadMessageCount];
});
//設(shè)置頂置
if ([message.content.senderUserInfo.name isEqualToString:@"最新訪客"] || [message.content.senderUserInfo.name isEqualToString:@"系統(tǒng)消息"] || [message.content.senderUserInfo.name isEqualToString:@"客服消息"]) {
[[RCIMClient sharedRCIMClient] setConversationToTop:message.conversationType targetId:message.targetId isTop:YES];
}
//將消息發(fā)送者用戶信息保存到本地數(shù)據(jù)庫
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"RYUserInfo"];
NSPredicate *pre = [NSPredicate predicateWithFormat:@"userId = %@", message.content.senderUserInfo.userId];
request.predicate = pre;
NSArray *resArray = [_context executeFetchRequest:request error:nil];
//如果不存在該用戶信息就保存
if (resArray.count == 0) {
//插入數(shù)據(jù)
RYUserInfo * info = [NSEntityDescription insertNewObjectForEntityForName:@"RYUserInfo" inManagedObjectContext:_context];
info.userId = message.content.senderUserInfo.userId;
info.name = message.content.senderUserInfo.name;
info.portraitUri = message.content.senderUserInfo.portraitUri;
NSError *error = nil;
if ([_context save:&error]) {
NSLog(@"數(shù)據(jù)插入到數(shù)據(jù)庫成功");
}else{
NSLog(@"數(shù)據(jù)插入到數(shù)據(jù)庫失敗");
}
} else {
//如果存在 就查看傳來的數(shù)據(jù)是否和本地一致不同就修改
RYUserInfo *info = resArray[0];
if (![info.name isEqualToString:message.content.senderUserInfo.name]) info.name = message.content.senderUserInfo.name;
if (![info.portraitUri isEqualToString:message.content.senderUserInfo.portraitUri]) info.portraitUri = message.content.senderUserInfo.portraitUri;
NSError *error = nil;
if ([_context save:&error]) {
NSLog(@"修改成功");
}else{
NSLog(@"更新數(shù)據(jù)失敗, %@", error);
}
}
}
}
/設(shè)置消息列表頭像昵稱
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *userInfo))completion {
if ([userId isEqualToString:[RCIM sharedRCIM].currentUserInfo.userId]) {
return completion([[RCUserInfo alloc] initWithUserId:userId name:[RCIM sharedRCIM].currentUserInfo.name portrait:[RCIM sharedRCIM].currentUserInfo.portraitUri]);
} else {
//查詢數(shù)據(jù)庫是否存在 UserID
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"RYUserInfo"];
NSPredicate *pre = [NSPredicate predicateWithFormat:@"userId = %@", userId];
request.predicate = pre;
NSArray *resArray = [_context executeFetchRequest:request error:nil];
//存在
if (resArray.count != 0) {
RYUserInfo *userInfo = resArray[0];
RCUserInfo *user = [[RCUserInfo alloc] initWithUserId:userInfo.userId name:userInfo.name portrait:userInfo.portraitUri];
return completion(user);
}
}
}