模仿闲鱼的搜索历史,条数有最大限制,搜索结果按从最新到最旧排列,并且有去重操作。
可以删除单条历史记录,也可以删除所有记录。
效果如下:
在模仿闲鱼的搜索历史中,需要将结果保存在本地,并且有如下要求:
①搜索结果倒序展示,即最新的搜索结果展示在最上边
②搜索结果不能重复
③最多存储10条
对于这些要求,可以如下解决
①搜索结果倒序展示,即最新的搜索结果展示在最上边
对于该条需求,只需在FMDB搜索时,按照主键rowid倒序展示即可
-(NSMutableArray *)findAllSearch{
NSMutableArray *arr = [NSMutableArray array];
FMDatabase *db = [FMDatabase databaseWithPath:self.dbPath];
if ([db open]) {
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM %@ order by rowid desc",TableName];
FMResultSet *rs = [db executeQuery:sql];
while ([rs next]) {
NSString *keyWord = [rs stringForColumn:@"keyWord"];
[arr addObject:keyWord];
}
[db close];
}
return arr;
}
**②搜索结果不能重复**
/** 去除数据库已有的相同搜索结果,先删除旧的,再插入新的,这样不影响结果显示 */
-(void)removeSameData:(NSString *)searchStr{
NSArray *tempArr = [[SHSearchDBManager shareSearchDBManage] findAllSearch];
if ([tempArr containsObject:searchStr]) {
[[SHSearchDBManager shareSearchDBManage] deleteSearchStrByKeyword:searchStr];
}
[[SHSearchDBManager shareSearchDBManage] insterSearchArr:searchStr];
}
**③最多存储10条**
#define MaxCount 10 //最多历史结果条数
/** 保持数据库只存10条数据,若有新的,则删除最旧的 */
-(void)moreThanMaxNumSearchStr:(NSString *)searchStr{
NSArray *tempArr = [[SHSearchDBManager shareSearchDBManage] findAllSearch];
if (tempArr.count > MaxCount) {
[[SHSearchDBManager shareSearchDBManage] deleteTheOldestSearchStr];
}
}
然后在往数据库添加新数据时,去重和限制条数是有顺序的
-(void)insertDataBase:(NSString *)searchStr{
if (searchStr.length==0) {
return;
} else {
//先去重再添加新的
[self removeSameData:searchStr];
[self moreThanMaxNumSearchStr:searchStr];
[_historyTableView reloadData];
}
}