在消息写入部分,我们在路径中写入的数据都是按写入数据的时间戳顺序排布的。那么问题来了,我们读取数据的时候是需要逆序读取的,毕竟最新的消息是最后写入,排在最后的。那怎么读取数据,怎么获取新消息呢 ?
在消息读取部分的时候就说过,我确实是不太懂后端的数据操作。并且看野狗云文档的时候,觉得文档内容好少,方法也有点拎不清,后来就是自己一个两个几个方法的组合,看实际写入和读取的数据,与自己阅读文档后的理解相对比,最终算是解决分页查询数据和新消息读取的问题。 开心~
先直接上代码吧。
<数据读取>self.ref中指向要操作的数据节点,对应为聊天页面的路径
sys_time是一条消息中的一个子节点,代表发送消息的时间。
self.lastUpdatetimeOnPrevPage 是每次刷新后消息数组的第一条数据的时间。
注意⚠️:监听为单次监听,只会回调一次。
整个语句的意思为“每触发一次加载更多方法,按照子节点‘sys_time’的值(Value)对结果排序,以self.lastUpdatetimeOnPrevPage为终点值,向前取三条数据” 这样就完全实现了数据逆向取值。
取到值之后,按照自己想要的方式去处理一遍数据,如添加时间节点等,这个按自己的项目需求来,不做说明了。需要注意⚠️的是,取到数据之后,更新lastUpdatetimeOnPrevPage值。
TestModel *model = moreMessages.firstObject;
_lastUpdatetimeOnPrevPage = model.time;
并且每次取到数据并将数据处理之后,再将数据insert到消息数组。这样的原因是
数据写入是:1,2,3,4,5,6,7,8。。。
数据读取是:第一次读取是6,7,8。第二次读取是4,5(去掉重复数据),第三次读取是3,2
所以为了保持数据位置的准备性,每次加载更多时,将后面获取的数据插入到消息数组的(0,数组个数)的位置。
[weakSelf.dataArray insertObjects:formattedMessages atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [moreMessages count])]];
以及每次加载完之后,可以将tableview定位到加载完成的位置。自己写--。
最最需要注意的一点⚠️:第一次加载数据的时候,是没有lastUpdatetimeOnPrevPage,哈哈哈哈 ,可以取最新的当前系统时间呀。这样就保证了每次进入消息页面取到的数据都是最新的。
网友评论