如何设置PFQuery以使用queryForTable获取具有给定角色的所有用户?

时间:2015-09-22 08:10:52

标签: ios swift uitableview parse-platform pfquery

我正在使用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(),但在这种情况下我收到以下警告:正在主线程上执行长时间运行的操作。

我确信必须有一种简单的方法来设置此查询...有没有人有想法?提前谢谢!

大卫

1 个答案:

答案 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