解析orQueryWithSubqueries无法正常工作(快速)

时间:2015-09-06 04:24:01

标签: ios swift parse-platform nosql

我正在努力在我的swift应用程序中实现消息传递功能,该应用程序在Parse上运行,并且使用Conversation方法查询orQueryWithSubqueries对象并不像它应该的那样。以下是我设置查询的方式:

    var user1 = PFQuery.getUserObjectWithId("someUserObjectID")
    var user2 = PFQuery.getUserObjectWithId("otherUserObjectID")

    var query1 = PFQuery(className: "Conversation")
    query1.whereKey("user1", equalTo: user1!)
    query1.whereKey("user2", equalTo: user2!)
    var query2 = PFQuery(className: "Conversation")
    query2.whereKey("user1", equalTo: user2!)
    query1.whereKey("user2", equalTo: user1!)

    var query = PFQuery.orQueryWithSubqueries([query1, query2])
    query.includeKey("user1")
    query.includeKey("user2")
    query.getFirstObjectInBackgroundWithBlock {
        (object: PFObject?, error: NSError?) -> Void in
        if (error == nil) {
            println("Found conversation object!")
        } else {
            var errorCode = error!.code
            if (errorCode == 101) {
                println("Did not find conversation object!")
            } else {
                println("Unknown error occurred.")
            }
        }
    }

基本上,在我的方案中,Conversation对象是PFObject,其中包含两个相关字段:user1user2 ...它只是定义了对话的两个用户在。。。之间。我需要此查询才能工作的原因是当用户想要与朋友开始新的Conversation时...我首先检查Conversation是否存在,并且此查询是我如何做到的。因为我不知道是谁启动了Conversation,所以我需要在两个用户字段中检查两个用户(我的应用程序会自动将user1字段填入任何启动对话的人)。

无论如何,这里发生了奇怪的行为。我在云中有一个会话对象:

user1 = someUser
user2 = otherUser

如果我按照上面输入的方式运行查询... Conversation找不到orQueryWithSubqueries对象(即使query1应找到Conversation对象!)。但是,如果我从query2中删除orQueryWithSubqueries,或者只是在whereKey中注释掉query2约束,则会找到Conversation个对象。这很奇怪,因为query2甚至不应该与查找Conversation对象有任何关系!因为query1是与对象匹配的那个,并且orQueryWithSubqueries应该返回与任一查询匹配的对象。任何人都可以解释我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

如果其他人遇到此问题,我从未找到让orQueryWithSubqueries正常工作的方法(可能是Parse iOS SDK中的错误),但这是我的解决方法:

    var query = PFQuery(className: "Conversation")
    query.whereKey("user1", containedIn: [user1, user2])
    query.whereKey("user2", containedIn: [user1, user2])

    query.getFirstObjectInBackgroundWithBlock {
        (object: PFObject?, error: NSError?) -> Void in
        if (error == nil) {

        } else {
            var errorCode = error!.code
            if (errorCode == 101) {

            } else {
                // Handle error here.
            }
        }
    }
相关问题