查找每个发件人的最新消息?

时间:2015-10-19 20:49:39

标签: ios swift parse-platform nspredicate pfquery

我的应用程序中有一个消息菜单,我完全不知道如何显示从EACH用户收到/发送的最新消息,而不加载收到/发送的所有消息。

我正在使用Parse作为我的后端,所以我必须相信我可以使用一些聪明的subqueryNSPredicate

我想到的当前解决方案是我的消息的另一个布尔属性,其中除最近的所有消息都得到了扩充,因此我可以知道用简单谓词加载什么。这看起来很简陋,除了我自己!

编辑:

现在我收到用户是发件人或收件人的消息(取决于分段控件),然后显示每个用户发送/接收的最新消息样本。

现在我正在使用内部逻辑来执行此操作,并且仍然在计算它的过程中(逻辑现在有点向后...)

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)  
                }
    }

1 个答案:

答案 0 :(得分:1)

如果您只想获得与您进行对话的每个用户的最新消息,请创建一个名为RecentMessage的新类,并在每次使用Message类上的> afterSave cloud function 。

在afterSave钩子中,将RecentMessage类中的指针维护到每个用户的对话中的最新Message。然后,您所要做的就是查询所有当前用户的RecentMessage个对象,并在includeKey指针上使用Message

这样,您就可以从客户端抽象出更多逻辑,并简化您的性能真正重要的查询:)