我的应用程序中有一个消息菜单,我完全不知道如何显示从EACH用户收到/发送的最新消息,而不加载收到/发送的所有消息。
我正在使用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)
}
}
答案 0 :(得分:1)
如果您只想获得与您进行对话的每个用户的最新消息,请创建一个名为RecentMessage
的新类,并在每次使用Message类上的> afterSave cloud function 。
在afterSave钩子中,将RecentMessage
类中的指针维护到每个用户的对话中的最新Message
。然后,您所要做的就是查询所有当前用户的RecentMessage
个对象,并在includeKey
指针上使用Message
。
这样,您就可以从客户端抽象出更多逻辑,并简化您的性能真正重要的查询:)