我正在努力在我的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
,其中包含两个相关字段:user1
和user2
...它只是定义了对话的两个用户在。。。之间。我需要此查询才能工作的原因是当用户想要与朋友开始新的Conversation
时...我首先检查Conversation
是否存在,并且此查询是我如何做到的。因为我不知道是谁启动了Conversation
,所以我需要在两个用户字段中检查两个用户(我的应用程序会自动将user1字段填入任何启动对话的人)。
无论如何,这里发生了奇怪的行为。我在云中有一个会话对象:
user1 = someUser
user2 = otherUser
如果我按照上面输入的方式运行查询... Conversation
找不到orQueryWithSubqueries
对象(即使query1
应找到Conversation
对象!)。但是,如果我从query2
中删除orQueryWithSubqueries
,或者只是在whereKey
中注释掉query2
约束,则会找到Conversation
个对象。这很奇怪,因为query2
甚至不应该与查找Conversation
对象有任何关系!因为query1
是与对象匹配的那个,并且orQueryWithSubqueries
应该返回与任一查询匹配的对象。任何人都可以解释我做错了什么吗?
答案 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.
}
}
}