1

我正在尝试在本地保留我的频道列表,因此我需要找到一种方法来仅查询在我上次“活动”之后已更新的频道。

Group Channel 具有 lastMessage 属性,该属性指示接收到最后一条消息(如果存在)的时间。如何获取在最近一次按摩后创建或更新的新频道?

目前,我使用以下代码段加载我的频道:

self.channelsListQuery = [SBDGroupChannel createMyGroupChannelListQuery];
[self.channelsListQuery setIncludeEmptyChannel: NO];
[self.channelsListQuery setOrder: (SBDGroupChannelListOrderLatestLastMessage)];

[self.channelsListQuery loadNextPageWithCompletionHandler: ^(NSArray<SBDGroupChannel*> *_Nullable channels, SBDError* _Nullable error) {

    // My stuff...
}];
4

2 回答 2

0

我对按最新活动对组频道进行排序有同样的要求,并在频道数组上使用了 Sort() 方法来解决这个问题。

一旦 [SBDGroupChannel] 的通道数组被填充并且在重新加载 tableview 之前,对数组进行排序。

这将我的群组频道按最新的排序。

self.groupChannelListQuery = SBDGroupChannel.createMyGroupChannelListQuery()
    self.groupChannelListQuery?.limit = 20
    self.groupChannelListQuery?.order = 
                  SBDGroupChannelListOrder.latestLastMessage

    self.groupChannelListQuery?.loadNextPage(completionHandler: { (channels, error) in
        if error != nil {
            DispatchQueue.main.async {
                self.refreshControl?.endRefreshing()
            }

            return
        }

        self.channels.removeAll()
        self.cachedChannels = false

        for channel in channels! {
            self.channels.append(channel)
        }

        DispatchQueue.main.async {
            if self.channels.count == 0 {
                self.tableView.separatorStyle = 
                  UITableViewCellSeparatorStyle.none
                self.noChannelLabel.isHidden = false
            }
            else {
                self.tableView.separatorStyle = 
                       UITableViewCellSeparatorStyle.singleLine
                self.noChannelLabel.isHidden = true
            }

            **self.channels.sort(by: { (channelA, channelB) -> Bool in 
                  return channelA.createdAt > channelB.createdAt 
             })**
            self.refreshControl?.endRefreshing()
            self.tableView.reloadData()
        }
    })
于 2018-03-09T03:45:39.923 回答
0

您可以使用getNextMessagesByTimestamp:limit:reverse:messageType:customType:completionHandler:which 将时间戳作为参数来执行此操作。

[self.channel getNextMessagesByTimestamp:yourLatestStoredTs limit:30 reverse:NO completionHandler:^(NSArray<SBDBaseMessage *> * _Nullable messages, SBDError * _Nullable error) {
            if (error != nil) {
                // Error!
                return;
            }
}];
于 2017-11-25T04:25:55.580 回答