我正在使用Parse的PFUser和PFRole类。现在我需要在UITableView中列出具有特定角色的用户,这似乎是一项相当简单的任务。
所以我创建了一个PFQueryTableViewController并覆盖了queryForTable()
,其中我试图首先获得该角色,然后是其用户:
override func queryForTable() -> PFQuery {
let roleQuery: PFQuery? = PFRole.query()
roleQuery!.whereKey("name", equalTo: "admin")
var userQuery: PFQuery?
roleQuery!.getFirstObjectInBackgroundWithBlock {
(object: PFObject?, error: NSError?) -> Void in
if error == nil {
let role: PFRole? = object as? PFRole
let relation: PFRelation? = role!.relationForKey("users")
userQuery = relation!.query()
}
}
return userQuery!
}
但是因为getFirstObjectInBackgroundWithBlock()
是异步的,所以应该返回的查询总是为零。我也尝试使用同步的getFirstObject()
,但在这种情况下我收到以下警告:正在主线程上执行长时间运行的操作。
我确信必须有一种简单的方法来设置此查询...有没有人有想法?提前谢谢!
大卫
答案 0 :(得分:0)
我在Parse和异步查询方面遇到了类似的问题,我已经用不同的方式解决了它。 您可以在调用视图控制器中的下载功能的函数中使用闭包。 例如。当您开始下载数据时,在表格视图上显示活动指示符,以防搜索结束并在
中成功if error == nil { //here you can populate your table in your view by using a closure function }
以下是有关如何使用闭包的文档的链接: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID103