gpt4 book ai didi

ios - 分页直到结束

转载 作者:行者123 更新时间:2023-11-28 05:55:01 24 4
gpt4 key购买 nike

我有一个使用 PubNub 作为聊天服务的应用程序。登录后,我想下载所有历史消息。不幸的是,PubNub 已将消息的最大数量限制为 100,因此您必须使用分页来下载所有消息,直到没有更多消息到达为止。我想要实现的工作流程如下:

  1. 加载前 100 条消息
  2. 处理它们(存储在应用程序中)
  3. 加载接下来的 100 条消息
  4. 等等..

他们提供的方法如下:

client.historyForChannel(channel, start: nil, end: nil, includeTimeToken: false)
{ (result, status) in
// my code here...
}

问题是,在“我的代码...”部分中,我需要再次调用该函数(使用开始日期)以加载接下来的 100 条消息。但是要再次调用该函数,我需要设置一个与调用该函数的完成 block 完全相同的完成 block 。这是一个无限循环..我怎样才能以不同的方式解决这个问题?非常感谢!

最佳答案

PubNub 历史分页示例代码

所有SDK都有实现历史分页的示例代码。请引用PubNub Swift SDK Storage API Reference History Paging section .

这是内联的代码:

分页历史响应:您可以通过传递 0 或有效时间标记作为参数来调用该方法。

// Pull out all messages newer then message sent at 14395051270438477.
let date = NSNumber(value: (14395051270438477 as CUnsignedLongLong));
self.historyNewerThen(date, onChannel: "history_channel", withCompletion: { (messages) in

print("Messages from history: \(messages)")
})


func historyNewerThen(_ date: NSNumber, onChannel channel: String,
withCompletion closure: @escaping (Array<Any>) -> Void) {

var msgs: Array<Any> = []
self.historyNewerThen(date, onChannel: channel, withProgress: { (messages) in

msgs.append(contentsOf: messages)
if messages.count < 100 { closure(msgs) }
})
}

private func historyNewerThen(_ date: NSNumber, onChannel channel: String,
withProgress closure: @escaping (Array<Any>) -> Void) {

self.client?.historyForChannel(channel, start: date, end: nil, limit: 100,
reverse: false, withCompletion: { (result, status) in

if status == nil {

closure((result?.data.messages)!)
if result?.data.messages.count == 100 {

self.historyNewerThen((result?.data.end)!, onChannel: channel,
withProgress: closure)
}
}
else {

/**
Handle message history download error. Check 'category' property
to find out possible reason because of which request did fail.
Review 'errorData' property (which has PNErrorData data type) of status
object to get additional information about issue.

Request can be resent using: [status retry];
*/
}
})
}

请参阅其他 SDK 语言特定实现中的相同部分。

关于ios - 分页直到结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com