IOS 基于SQL实现可以保存聊天记录的功能实现
由于公司要在app中实现聊天功能,在花了一段时间了解实现该功能后发现网上的资料大多只实现了聊天对话,互发图片,录音等等,找了好久都没有发现一个自带存储聊天记录的资料,于是我在简单的用SQL实现了存储功能后在此分享一下,希望对有需要的童鞋有帮助
使用FMDB框架封装
首先打开数据库,没有的话新建一个
-(id)initWithIdf:(int)idf{
NSString *idpath = [NSString stringWithFormat:@"Documents/%d.db",idf];
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:idpath];
_db = [[FMDatabase alloc] initWithPath:path];
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打开数据库失败");
return self;
}else{
NSLog(@"打开数据库%@",path);
}
res = [_db executeUpdate:@"create table if not exists chat(uid integer primary key autoincrement,direct integer,talk text)"];
if (res == NO) {
NSLog(@"创建对话表失败");
[_db close];
return self;
}else{
NSLog(@"创建对话表ok");
}
return self;
}
然后添加用户
-(void)addTalk:(int)dir with:(NSString *)str{
BOOL res = [_db executeUpdate:@"INSERT INTO chat (direct, talk) VALUES (?, ?);",[NSNumber numberWithInt:dir],str];
if (res) {
NSLog(@"保存成功");
}else{
NSLog(@"保存失败");
}
}
最后是获取以往的信息,如果只需要要最新的几条可以用注释里面的
-(NSArray *)getTalk:(YsRoom *)use{
NSMutableArray *arry = [NSMutableArray array];
//如果只取5条信息
// NSString *a = @"select *from chat order by uid desc limit 5";
// FMResultSet *set = [_db executeQuery:a];
FMResultSet *set = [_db executeQuery:@"select *from chat"];
while ([set next]) {
NSString *name = [set stringForColumn:@"talk"];
int a = [set intForColumn:@"direct"];
YsModel *model = [YsModel new];
model.text = name;
[arry addObject:model];
NSLog(@"talk=%@\n dir=%d",name,a);
}
return arry;
}
这样就实现了最简单的文本保存,如果要保存相片的话可以先转位data形式保存,这里暂时没有实现
下面是git的地址
GitHub - yellowretake/YsChat: 使用SQL实现存储功能的聊天界面
如果觉得有帮助的话帮我打个星哦,我也会去继续完善的