2017-02-21 34 views
0

В viewDidLoad моего диспетчера просмотра чата я написал self.appDelegate.client?.historyForChannel(currentChannel, start: nil, end: nil, limit: 20, withCompletion: и он извлекает 20 последних сообщений. Тем не менее, я хочу получить предыдущие/старые 20 сообщений до этих последних 20 сообщений для моей бесконечной прокрутки. Как я могу это сделать?Swift + Pubnub chat app load old message for scrolling

+0

Можете ли вы уточнить «Мне нужно получить еще 20 сообщений» в вашем вопросе !! которые 20 сообщений? –

+0

говорят, что в истории сообщений 40 сообщений, viewDidLoad извлекает сообщение [0] ~ [19], как я получу [20] ~ [39]? –

ответ

3

магазин метка времени первого сообщения, полученного от истории Pubnub, чтобы получить следующие 20 сообщений:

self.client?.historyForChannel(channel, start: lastStoredTimstamp, end: nil, limit: 20, reverse: false, withCompletion:

Я проверил его и он работает хорошо.

Описание: Использование только параметра start всегда возвращает сообщения старше установленного маркера времени. Если вы установите reverse = true, вы получите сообщение более новое, чем предоставленный токен времени.

См. https://www.pubnub.com/docs/swift/storage-and-history, как API истории PubNub работает с графиком временной шкалы.

0

Это может быть сделано с помощью UIScrollViewDelegate (в вашем случае, это внутри UITableView)

Прежде всего, установить делегат вашего UITableView.

Затем вы должны переопределить scrollViewDidScroll(_ scrollView: UIScrollView), и это пример кода:

let currentOffset = scrollView.contentOffset.y 
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height 

let deltaOffset = maximumOffset - currentOffset 
if (deltaOffset <= 0) 
    // call to self.appDelegate.client?.historyForChannel with the offsets 
) 

Условный выражение ударит, когда вы достигли в нижней части списка.

self.appDelegate.client?.historyForChannel содержит старт & конец смещения. Запуск можно рассчитать, добавив +20 (объявить переменную класса где-то) после каждого вызова historyForChannel, но он будет работать только в том случае, если объекты из ответа не имеют никаких уникальных идентификаторов.

+0

проблема заключается в том, что 'start' и' end' являются NSNumbers, и они должны быть датой. Вот почему я не могу просто сделать простую +20 для каждой прокрутки –