FMDB存储聊天记录 (plist存储最后一组对话数据)

聊天记录存在的参数 根据mvc先创建model

#import <Foundation/Foundation.h>

@interface ChatSQLModel : NSObject

@property (nonatomic,copy)NSString *fromUserName;
@property (nonatomic,copy)NSString *fromUserId;
@property (nonatomic,copy)NSString *chatContent;
@property (nonatomic,copy)NSString *chatImage;
@property (nonatomic,copy)NSString *audioStr;
@property (nonatomic,copy)NSString *chatContentType;
@property (nonatomic,copy)NSString *toUserId;
@property (nonatomic,copy)NSString *toUserName;
@property (nonatomic,copy)NSString *chatFrom;
@property (nonatomic,copy)NSString *audiofileName;


//***创建时间
@property (nonatomic,copy)NSString *createTime;
@end

存储聊天记录 每组对话存到一个表中 最后的对话 存放在plist中 (类似QQ)

#import <Foundation/Foundation.h>
#import "ChatSQLModel.h"
@interface ChatDBManager : NSObject
+(ChatDBManager *)defaultChatManager;

//创建一聊天记录表
-(void)createNewTableWithModel:(ChatSQLModel *)model;
//插入聊天记录
-(void)insertChatModelWithModel:(ChatSQLModel *)model;
//得到聊天记录的相关内容
-(NSMutableArray *)getChatHistoryWithModel:(ChatSQLModel *)model;
//清空聊天记录
-(void)clearChatTableWithModel:(ChatSQLModel*)model;
@end

 写个单例 每次创建表时先判断表是否存在

// 判断是否存在表
- (BOOL) isTableOK:(NSString *)tableName
{
    FMResultSet *rs = [_chatDataBase executeQuery:@"SELECT count(*) as 'count' FROM sqlite_master WHERE type ='table' and name = ?", tableName];
    while ([rs next])
    {
        NSInteger count = [rs intForColumn:@"count"];
        if (0 == count)
        {
            return NO;
        }
        else
        {
            return YES;
        }
    }
    return NO;
}

创建表

//根据model创建聊天记录的表
-(id)init{
    self = [super init];
    if(self){
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentDirectory = [paths objectAtIndex:0];
        NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"ChatDataBase.db"];
        _chatDataBase = [[FMDatabase alloc] initWithPath:dbPath];
        [_chatDataBase open];
        }
    return self;
}
//创建聊天记录表
-(void)createNewTableWithModel:(ChatSQLModel *)model{
    
    if([_chatDataBase open]){
        if ([self isTableOK:model.toUserId]==YES) {
            NSLog(@"已经存在这张表");
            return;
        }
           NSString *createChatTable = [NSString stringWithFormat:@"create table if not exists '%@' (fromUserName varchar(256),fromUserId varchar(256),chatContent varchar(256),toUserId varchar(256),toUserName varchar(256),chatImage varchar(256),audio varchar(256),chatType varchar(256),chatFrom varchar(256))",model.toUserId];
    BOOL ifSuccess = [_chatDataBase executeUpdate:createChatTable];
    if(ifSuccess){
        NSLog(@"创建%@与%@的聊天记录表成功!",model.fromUserName,model.toUserName);
    }else{
        NSLog(@"创建%@与%@的聊天记录表失败!",model.fromUserName,model.toUserName);
      
       }
    }
}

插入聊天记录

//添加一条数据
-(void)insertChatModelWithModel:(ChatSQLModel *)model{
 
    NSString *insertCharSQL = [NSString stringWithFormat:@"insert into '%@'(fromUserName,fromUserId,chatContent,toUserId,toUserName,chatImage,audio,chatType,chatFrom) values(?,?,?,?,?,?,?,?,?)",model.toUserId];
    BOOL ifSuccessed = [_chatDataBase executeUpdate:insertCharSQL,model.fromUserName,model.fromUserId,model.chatContent,model.toUserId,model.toUserName,model.chatImage,model.audioStr,model.chatContentType,model.chatFrom];
    if(ifSuccessed){
        NSLog(@"插入与%@聊天数据成功",model.fromUserName);
    }else{
        NSLog(@"插入与%@聊天数据失败",model.fromUserName);
    }
}

获取表的数据

//获取表的数据
-(NSMutableArray *)getChatHistoryWithModel:(ChatSQLModel *)model{
 
    NSString *selectSQL = [NSString stringWithFormat:@"select * from '%@'",model.toUserId];
    FMResultSet *set = [_chatDataBase executeQuery:selectSQL];
    NSMutableArray *array = [NSMutableArray array];
    while ([set next]) {
        ChatSQLModel *model = [[ChatSQLModel alloc] init];
        model.fromUserId = [set stringForColumn:@"fromUserId"];
        model.fromUserName = [set stringForColumn:@"fromUserName"];
        model.chatContent = [set stringForColumn:@"chatContent"];
        model.toUserId = [set stringForColumn:@"toUserId"];
        model.toUserName = [set stringForColumn:@"toUserName"];
        model.chatImage = [set stringForColumn:@"chatImage"];
        model.audioStr = [set stringForColumn:@"audio"];
        model.chatContentType = [set stringForColumn:@"chatType"];
        model.chatFrom = [set stringForColumn:@"chatFrom"];
        [array addObject:model];
    }
    return array;
}

清除聊天记录

//清楚聊天记录
-(void)clearChatTableWithModel:(ChatSQLModel *)model{
    BOOL ifSuccessed = [_chatDataBase executeUpdate:[NSString stringWithFormat:@"delete from '%@'",model.toUserId]];
    if(ifSuccessed){
        NSLog(@"删除与%@聊天数据成功",model.fromUserName);
    }else{
        NSLog(@"删除与%@聊天数据失败",model.fromUserName);
    }
}

至于最后一条记录的存储 就是纯plist的操作

#import <Foundation/Foundation.h>

@interface LastChatList : NSObject
+(LastChatList *)shareLastChat;
//创建聊天的plist文件
-(void)createChatPList;
//存入聊天记录的最后一条记录
-(void)insertPlistWithL:(NSMutableDictionary *)lastChatDict;
//读取聊天记录的最后一条数据
-(NSMutableArray *)getAllPlistDataArr;
//清空聊天记录
-(void)clearPlist;
@end
#import "LastChatList.h"
@implementation LastChatList
{
    NSString *fieldPath;
}
static LastChatList *_lastPlist;
+(LastChatList*)shareLastChat{
 
    if(_lastPlist == nil){
        _lastPlist = [[LastChatList alloc] init];
    }
    return _lastPlist;
}
-(void)createChatPList{
 
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* fieldPathOld = [paths objectAtIndex:0];
    fieldPath = [fieldPathOld stringByAppendingPathComponent:@"lastChat.plist"];
    NSFileManager *file = [NSFileManager defaultManager];
    if([file fileExistsAtPath:fieldPath]){
        
        NSLog(@"文件已经存在 不要创建");

    }else{
        NSLog(@"文件不存在 需要创建");
        NSArray *doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *docPath = [ doc objectAtIndex:0];
        NSMutableArray *rootArray = [[NSMutableArray alloc]init];
        [rootArray writeToFile:[docPath stringByAppendingPathComponent:@"lastChat.plist"] atomically:YES];
    }
    NSLog(@"fieldPath = %@",fieldPath);
}
//存入聊天记录的最后一条记录
-(void)insertPlistWithL:(NSMutableDictionary *)lastChatDict{
    
    int ifExist = [self checkIfExixts:lastChatDict];
    NSMutableArray *arr = [self getAllPlistDataArr];
    if(ifExist == -1){
     //新数据
       [arr addObject:lastChatDict];
    }else{
        [arr replaceObjectAtIndex:ifExist withObject:lastChatDict];
    }
     [arr writeToFile:fieldPath atomically:YES];
}
//读取聊天记录的最后一条数据
-(NSMutableArray *)getAllPlistDataArr{
 
    NSMutableArray *arr = [NSMutableArray arrayWithContentsOfFile:fieldPath];
    return arr;
}
-(int)checkIfExixts:(NSDictionary *)newDataDict{
 
     NSMutableArray *arr = [NSMutableArray arrayWithContentsOfFile:fieldPath];
    for(int i=0;i<arr.count;i++){
        NSDictionary *dict = arr[i];
        NSString *toUserId = [dict objectForKey:@"toUserID"];
        NSString *fromUserId = [dict objectForKey:@"fromUserID"];
        NSString *newToUserId = [newDataDict objectForKey:@"toUserID"];
        NSString *newFromUserId =[newDataDict objectForKey:@"fromUserID"];
        if([toUserId isEqualToString:newToUserId]&&[fromUserId isEqualToString:newFromUserId]){
            NSLog(@"存在");
            return i;
        }
    }
    return -1;
}

-(void)clearPlist{
  NSMutableArray *arr = [self getAllPlistDataArr];
    [arr removeAllObjects];
    [arr writeToFile:fieldPath atomically:YES];
    
}

 

posted @ 2015-07-14 09:46  Mac-one  阅读(677)  评论(0编辑  收藏  举报