【发布时间】:2015-10-19 20:49:38
【问题描述】:
我的应用中有一个消息菜单,我完全不知道如何显示从每个用户接收/发送的最新消息,而不加载所有接收/发送的消息。
我使用 Parse 作为我的后端,所以我必须相信有一些聪明的 subquery 或 NSPredicate 我可以使用它。
我想到的当前解决方案是我的消息的另一个布尔属性,除了最近的消息之外,所有消息都得到了增强,所以我可以知道用一个简单的谓词加载什么。不过,这似乎很草率,请救救我!
编辑:
现在,我正在获取用户是发送者或接收者的消息(取决于分段控件),然后显示发送给/接收的每个用户以及他们最新消息的样本。
目前我正在使用内部逻辑来执行此操作,并且仍在解决过程中(现在逻辑有点倒退......)
let query = PFQuery(className: "Messages")
if recievedOrSent {
query.whereKey("other", equalTo: userName)
print("called OTHER query")
} else {
query.whereKey("sender", equalTo: userName)
print("called SENDER query")
}
query.addDescendingOrder("createdAt")
query.findObjectsInBackgroundWithBlock {
(objects, error) -> Void in
if error == nil {
if thisSender == userName || self.recievedUsers.contains(thisSender) && self.lesserDate(thisTime, rhs: self.recievedUsersTimes[self.recievedUsers.indexOf(thisSender)!])
{} else {
self.recievedUsers.append(thisSender)
self.recievedUsersMsg.append(thisMessage)
self.recievedUsersTimes.append(thisTime)
self.recievedUsersMsgRead.append(thisRead)
}
if thisOther == userName || self.sentUsers.contains(thisOther) && self.lesserDate(thisTime, rhs: self.sentUsersTimes[self.sentUsers.indexOf(thisOther)!])
{} else {
self.sentUsers.append(thisOther)
self.sentUsersMsg.append(thisMessage)
self.sentUsersTimes.append(thisTime)
self.sentUsersMsgRead.append(thisRead)
}
}
【问题讨论】:
-
你能贴出你迄今为止尝试过的代码吗? Parse 中的日期对象是可比较的,这意味着您可以使用 lessThan、greaterThan 等约束。您可以按降序查询和排序日期(最近的在前),将结果限制为每个用户,然后限制为 50 条消息或任何您想要的。
-
感谢@Russell!但是我仍然看不到限制和用户名约束如何只从每个用户那里获得第一个。那不就是前 50 个匹配用户并且拥有一个共同用户名的人吗?如果用户刚刚与某人交换了 50 条消息,那将排除其他用户。 -麦克莱恩
-
对不起,我误解了你的意图。见下文!
标签: ios swift parse-platform nspredicate pfquery