我想在我的UITableView中从Parse加载最后30条记录(在这种情况下是消息),通过" created"来命令它们。日期。我能够这样做,但是,消息排序到第30条记录,下一条记录不显示在我的UITableView中。
这是我的代码:
let messagesQuery = PFQuery(className: "Message")
messagesQuery.includeKey("conversation")
messagesQuery.includeKey("author")
messagesQuery.whereKey("conversation", equalTo: conversation)
messagesQuery.orderByAscending("createdAt")
messagesQuery.limit = 30
messagesQuery.findObjectsInBackgroundWithBlock { (results, error) -> Void in
}
我知道我可以使用orderByDescending("createdAt")
代替......但是,如果我这样做,我的消息顺序就会颠倒过来。我的意思是,我得到最后30条消息,但顺序是相反的(最旧的消息显示在对话的底部,最新的消息显示在顶部)。
那么我该如何解决这个问题呢?它会显示最近30条消息,最近的消息是在我的对话底部?
谢谢!
答案 0 :(得分:0)
为您的查询设置跳过值。
[messagesQuery setSkip: 0];
参考链接 https://parse.com/questions/fetch-all-data-in-a-table-using-pfquery
答案 1 :(得分:0)
尝试orderByAscending(“createdAt”)
当用户向前滚动到前30条消息的底部时,听起来您还希望有一个加载更多按钮。当用户到达底部时,您可以使用更多加载按钮或自动加载。
答案 2 :(得分:0)
您可以尝试在结果块中对它们进行排序,如下所示:
let messagesQuery = PFQuery(className: "Messages")
messagesQuery.includeKey("conversation")
messagesQuery.includeKey("author")
messagesQuery.whereKey("conversation", equalTo: conversation)
messagesQuery.orderByDescending("createdAt")
messagesQuery.limit = 30
messagesQuery.findObjectsInBackgroundWithBlock { (results, error) -> Void in
if var messages: Array<PFObject> = results {
for message in messages {
print(message.createdAt!)
}
messages.sortInPlace({ $0.createdAt!.compare($1.createdAt!) == NSComparisonResult.OrderedAscending })
print("")
for message in messages {
print(message.createdAt!)
}
}
}