我正在执行消息传递功能到我的快速应用程序中,它运行在Parse上,并且使用orQueryWithSubqueries
方法查询Conversation
对象的方法并不像它应该的那样工作。下面是我如何设置我的查询:Parse或QueryWithSubqueries不能正常工作(swift)
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
两个相关领域:user1
和user2
...它只是定义了两个用户的谈话之间。我需要这个查询工作的原因是,当一个用户想和朋友一起开始一个新的Conversation
...我首先检查Conversation
是否存在,这个查询是我如何做到的。因为我不知道是谁开始了Conversation
,所以我需要检查两个用户字段中的两个用户(我的应用程序会自动填充user1字段与谁开始对话)。
无论如何,这里是奇怪的行为发生的地方。我在云中的谈话对象,其中:
user1 = someUser
user2 = otherUser
如果我跑我的查询它上面键入...的Conversation
对象不被orQueryWithSubqueries
(发现的方式,即使query1
应该找到Conversation
对象!)。但是,如果我从orQueryWithSubqueries
中删除query2
,或者甚至只是注释掉query2
中的whereKey
约束...找到Conversation
对象。这很奇怪,因为query2
甚至不应该找到Conversation
对象!因为query1
是匹配对象的那个,并且orQueryWithSubqueries
应该返回与任一查询匹配的对象。任何人都可以阐明我做错了什么吗?