【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
还是上一篇的消息列表,不过这次类型可能不止三个,要怎么做呢?参考一下别人的代码 ,跟读记录一下:
阅读代码,消息列表,多种类型,列表里有重复类型的消息,比如 聊天 可能是不同的人,别的公告什么的是一样的,只显示一行,其他有的类型可能是多行。
数据源: self.messageList 数组。
进入页面通过 tableview主动刷新 ,先链接 MQTT 注册 MQTT 然后去请求接口:
接口: xxx_list 返回了一个list的 message 的 model.
然后请求 session LIst 接口: CMD:@“xxxx_sessions" 不传参数。
然后遍历返回的 data数据数组:
去找是否有 会议类型的,如果有的话就加到 self.messageList 。
然后 :请求列表每项的未读数和最新一条消息 cmd:xxx_notices 传入 id 从 messageList 数组里遍历 model 拿到外面的 ID , 然后把返回来的 对应 list 的 model 一个个赋值给:
temp.accountNotice = accountNoticeListDicModel.data[i];
每赋值一个,给 model里的 计数属性字段加 1.
临时创建一个局部变量数组 把配置好的 临时 model 加进去。
然后把这个临时的 数组 更新缓存数组:messagecacheList
NSMutableArray *messageIndexPathNew = [[NSMutableArray alloc] init]; if (self.messagecacheList.count != messageNewList.count){ // 如果两次结果不相等 则全部刷新 [self.messageTV reloadData]; } else { // for (int i = 0; i < self.messagecacheList.count; i++){ // 比较对应行是否有变化 如果有则将对应行放入刷新队列 Message *oldmessage = self.messagecacheList[i]; Message *message = messageNewList[i]; if (![oldmessage.accountNotice isEqual:message.accountNotice] || ![oldmessage isEqual:message]){ [messageIndexPathNew addObject:[NSIndexPath indexPathForRow: i inSection:0]]; } }
在 message model里重写了 比较方法 然后进行具体的字段比较。
- (BOOL)isEqual:(Message *)object{ if (self == object){ return true; } // ID 相等 名字相等 图标相等 if ([self.idField isEqualToString:object.idField] && [self.name isEqualToString:object.name] &&xxxxx]]){ return true; } return false; }
刷新单独去刷新, 使用组建好的 messageIndexPathNew 数组。
来源:oschina
链接:https://my.oschina.net/u/3619392/blog/3152140