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

Ios 如何使用queryForTable设置PFQuery以获取具有给定角色的所有用户?,ios,swift,uitableview,parse-platform,pfquery,Ios,Swift,Uitableview,Parse Platform,Pfquery,我正在使用Parse的PFUser和PFRole类。现在,我需要在UITableView中列出具有特定角色的用户,这似乎是一项相当简单的任务 因此,我创建了一个PFQueryTableViewController,并覆盖了queryForTable(),在其中我尝试首先获取角色,然后获取其用户: override func queryForTable() -> PFQuery { let roleQuery: PFQuery? = PFRole.query() roleQu

我正在使用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!
}
但是由于
getFirstObjectInBackgroundithBlock()
是异步的,因此应该返回的查询始终为零。我还尝试了同步的
getFirstObject()
,但在本例中,我得到了以下警告:正在主线程上执行一个长时间运行的操作

我相信一定有一个简单的方法来设置这个查询…有人有想法吗?提前谢谢你


David

我在解析和异步查询方面也遇到过类似的问题,我用不同的方法解决了这个问题。 您可以在调用视图控制器中下载函数的函数中使用闭包。 例如,当您开始下载数据时,在表视图上显示活动指示器,如果搜索已结束并且在

if error == nil { //here you can populate your table in your view by using a closure function }
以下是有关如何使用闭包的文档链接:

首先运行角色查询,然后在表准备就绪时加载表,这样您就有了创建queryHi@Wain所需的所有详细信息,谢谢您的快速回答。如何运行角色查询然后加载表?我试图在init()方法中运行它,但出现以下错误:在使用Parse之前,必须向registerSubclass注册类PFRole。这是您的根视图控制器吗?最好在上一个屏幕上获取角色并将其传递,如果需要,为此添加一个新的启动屏幕。@Wain:是的,这是初始视图控制器…好的,我会试试!再次感谢您的帮助!;-)嗨@Shelin,谢谢你的回答。问题是queryForTable()本身不应该执行查询,而应该简单地“构建”并返回它……好的,那么当您获得查询时,您希望如何继续?您想做其他事情,然后将查询中的数据加载到表中吗?您的viewcontroller中是否有要将查询绑定到的变量?Hi@Shelin:据我所知,在使用PFQueryTableViewController时,您不能显式执行查询…您只需使用
queryForTable()
方法指定它,然后控制器在需要时使用它从解析中获取数据。所以,在运行这个查询之前,我不知道如何“做其他事情”。