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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM