簡體   English   中英

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

[英]Parse orQueryWithSubqueries not working correctly (swift)

我正在努力在運行於Parse的swift應用程序中實現消息傳遞功能,並且使用orQueryWithSubqueries方法查詢Conversation對象的工作效果不理想。 這是我設置查詢的方式:

    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對象是具有兩個相關字段的PFObjectuser1user2 ...,它簡單地定義了對話之間的兩個用戶。 我需要此查詢才能運行的原因是,當用戶想與朋友開始新的Conversation時...我首先檢查該Conversation存在,並且此查詢就是我的操作方式。 因為我不知道是誰發起了Conversation ,所以我需要檢查兩個用戶字段中的兩個用戶(我的應用自動將發起對話的人填充到user1字段中)。

無論如何,這是發生奇怪行為的地方。 我在雲中有一個對話對象,其中:

user1 = someUser
user2 = otherUser

如果我跑我的查詢的方式,它上面鍵入...的Conversation對象沒有被發現orQueryWithSubqueries (即使query1應該找到Conversation的對象!)。 但是,如果我從orQueryWithSubqueries刪除了query2 ,或者甚至只是注釋掉query2 whereKey約束...,就會找到Conversation對象。 這很奇怪,因為query2甚至與查找“ Conversation對象都不相關! 因為query1是與對象匹配的對象, orQueryWithSubqueries應該返回與任一查詢匹配的對象。 有人能說明我做錯了什么嗎?

萬一其他人遇到此問題,我永遠都找不到找到使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.
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM