基本上,我正在开发一个聊天应用程序。为了从解析中检索“房间”对象,我使用如下查询:
func loadData(){
rooms = [PFObject]()
users = [PFUser]()
self.tableView.reloadData()
let pred = NSPredicate(format: "user1 = %@ OR user2 = %@", PFUser.currentUser()!, PFUser.currentUser()!)
let roomQuery = PFQuery(className: "Room", predicate: pred)
roomQuery.orderByDescending("lastUpdate")
roomQuery.includeKey("user1")
roomQuery.includeKey("user2")
roomQuery.findObjectsInBackgroundWithBlock { (results, error) -> Void in
if error == nil {
self.rooms = results as! [PFObject]
for room in self.rooms {
let user1 = room.objectForKey("user1") as! PFUser
let user2 = room["user2"] as! PFUser
if user1.objectId != PFUser.currentUser()!.objectId {
self.users.append(user1)
}
if user2.objectId != PFUser.currentUser()!.objectId {
self.users.append(user2)
}
}
self.tableView.reloadData()
}
}
}
现在,在查找当前用户所属的任何房间时,此功能运行良好。我想做的是在应用程序的某个地方,我还有一个用户名数组(字符串类型)。
所以问题是:如何使用上面的 NSPredicate
,以确保返回的 results/PFObject
也能匹配中的任何用户名user1 或 user2 用户名的数组。
(基本上,这个想法是,该数组代表您的联系人,如果某人不再是您的联系人,您不应该再看到该房间)
请漂亮一点好吗? :<
最佳答案
您应该创建一个允许用户的数组,包括当前用户和所有其他用户 ID 的占位符对象(请参阅 objectWithoutDataWithClassName:objectId:
)。然后在查询中使用该数组与 IN
,而不是测试直接相等 (=
)。
关于ios - NSPredicate & Parse 让它从数组中返回与当前用户匹配的结果,以及用户名字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30838227/