iOS聊天下拉重新整理聊天記錄的實現,ios聊天記錄
1. 想法
最近在開發一個社交類app,要實作類別似那種下拉重新整理聊天記錄的功能。
一般有兩種實現方式:
1. 直接fetch一個entity的所有資料然後在記憶體中做filter,就是把所有聊天記錄先讀出來然後每次載入10條。
缺點:浪費記憶體 優點:速度快
2. 使用predicate,每次訪問資料庫讀取10條資料顯示。
缺點:速度比較慢,會有卡頓現象 優點:記憶體少
2. 實現
因為聊天記錄非常多,一次讀取太浪費記憶體了,決定還是每次下拉就從資料庫讀取10條顯示。
1 -(NSArray *)queryMessageResult 2 { 3 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([HistoryMessageLog class])]; 4 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"time" ascending:NO]; 5 //把排序和分組規則添加到請求中,這樣聊天記錄根據時間倒序,最新的記錄在前面 6 [request setSortDescriptors:@[sortDescriptor]]; 7 8 [request setFetchLimit:10]; 9 [request setFetchOffset:self.FetchOffset];10 11 NSError *error;12 NSArray *messageArray = [[(id)[UIApplication sharedApplication].delegate managedObjectContext] executeFetchRequest:request error:&error];13 if ([messageArray count]) {14 //每次都要更新遊標15 self.FetchOffset += [messageArray count];16 }17 return messageArray;18 19 }
這樣每次都能讀取10條記錄出去,這個實現比較容易,做複雜了可以根據時間來讀取一定的條數。
3. 代碼
聊天的功能也做的差不多了,不過還有一些小問題,下面是
如果有感興趣的朋友可以下載代碼去看看,然後一起交流。
github地址:https://github.com/stevenxiaoyang/Chat.git