在消息寫入部分,我們在路徑中寫入的數(shù)據(jù)都是按寫入數(shù)據(jù)的時間戳順序排布的。那么問題來了隧膏,我們讀取數(shù)據(jù)的時候是需要逆序讀取的,畢竟最新的消息是最后寫入嚷那,排在最后的胞枕。那怎么讀取數(shù)據(jù),怎么獲取新消息呢 魏宽?
在消息讀取部分的時候就說過腐泻,我確實是不太懂后端的數(shù)據(jù)操作决乎。并且看野狗云文檔的時候,覺得文檔內(nèi)容好少派桩,方法也有點拎不清构诚,后來就是自己一個兩個幾個方法的組合,看實際寫入和讀取的數(shù)據(jù)铆惑,與自己閱讀文檔后的理解相對比甲馋,最終算是解決分頁查詢數(shù)據(jù)和新消息讀取的問題某抓。 開心~
先直接上代碼吧艾帐。
self.ref中指向要操作的數(shù)據(jù)節(jié)點录平,對應(yīng)為聊天頁面的路徑
sys_time是一條消息中的一個子節(jié)點,代表發(fā)送消息的時間撕阎。
self.lastUpdatetimeOnPrevPage 是每次刷新后消息數(shù)組的第一條數(shù)據(jù)的時間盏阶。
注意??:監(jiān)聽為單次監(jiān)聽,只會回調(diào)一次闻书。
整個語句的意思為“每觸發(fā)一次加載更多方法,按照子節(jié)點‘sys_time’的值(Value)對結(jié)果排序脑慧,以self.lastUpdatetimeOnPrevPage為終點值魄眉,向前取三條數(shù)據(jù)” 這樣就完全實現(xiàn)了數(shù)據(jù)逆向取值。
取到值之后闷袒,按照自己想要的方式去處理一遍數(shù)據(jù)坑律,如添加時間節(jié)點等,這個按自己的項目需求來囊骤,不做說明了晃择。需要注意??的是,取到數(shù)據(jù)之后也物,更新lastUpdatetimeOnPrevPage值宫屠。
TestModel *model = moreMessages.firstObject;
_lastUpdatetimeOnPrevPage = model.time;
并且每次取到數(shù)據(jù)并將數(shù)據(jù)處理之后,再將數(shù)據(jù)insert到消息數(shù)組滑蚯。這樣的原因是
數(shù)據(jù)寫入是:1浪蹂,2,3告材,4坤次,5,6斥赋,7缰猴,8。疤剑。滑绒。
數(shù)據(jù)讀取是:第一次讀取是6闷堡,7,8蹬挤。第二次讀取是4缚窿,5(去掉重復(fù)數(shù)據(jù)),第三次讀取是3焰扳,2
所以為了保持?jǐn)?shù)據(jù)位置的準(zhǔn)備性倦零,每次加載更多時,將后面獲取的數(shù)據(jù)插入到消息數(shù)組的(0吨悍,數(shù)組個數(shù))的位置扫茅。
[weakSelf.dataArray insertObjects:formattedMessages atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [moreMessages count])]];
以及每次加載完之后,可以將tableview定位到加載完成的位置育瓜。自己寫--葫隙。
最最需要注意的一點??:第一次加載數(shù)據(jù)的時候,是沒有l(wèi)astUpdatetimeOnPrevPage躏仇,哈哈哈哈 恋脚,可以取最新的當(dāng)前系統(tǒng)時間呀。這樣就保證了每次進(jìn)入消息頁面取到的數(shù)據(jù)都是最新的焰手。