Ios 从parse.com检索对象并使用return等待,直到检索到数据

Ios 从parse.com检索对象并使用return等待,直到检索到数据,ios,swift,parse-platform,pfquery,Ios,Swift,Parse Platform,Pfquery,如何等待从parse.com检索到数据 因为parse.com的响应太慢,所以我有一个返回空字符串的函数。如果我将断点放在成功区域内,它将在需要数据后中断“long”。我想有一种方法可以让数据同步,让它等待 func getObjectId(localPersonId:NSString) -> NSString{ var currentObjectId:NSString = "" var query = PFQuery(className:"myClass") q

如何等待从parse.com检索到数据

因为parse.com的响应太慢,所以我有一个返回空字符串的函数。如果我将断点放在成功区域内,它将在需要数据后中断“long”。我想有一种方法可以让数据同步,让它等待

func getObjectId(localPersonId:NSString) -> NSString{
    var currentObjectId:NSString = ""

    var query = PFQuery(className:"myClass")
    query.whereKey("personId", equalTo:localPersonId)
    query.whereKey("groupId", equalTo:self.currentGroupId)
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil {
            // should not use a for loop since this should 
            // only return one row
            for object in objects {
                currentObjectId = object["objectId"] as NSString
            }
        } else {
            // Log details of the failure
            NSLog("Error: %@ %@", error, error.userInfo!)
        }
    }

    return currentObjectId
}

在这种情况下,getObjectId函数将返回一个空字符串。有人吗?

我知道这已经3个月了,但是尽管解析文档非常好/有用,但是没有太多人回答IOS解析相关的问题

这应该行得通。它使用一个完成处理程序,这是处理此问题的一种简单方法

(有关异步上下文中的完成处理程序的详细信息:)


您需要使
getObjectId函数
异步。现在,行
return currentObjectId
正在查询完成之前执行。是的,这就是问题所在。我怎样才能使函数异步呢?很遗憾,在这里,这个链接并没有让我明白我的问题。。。我想我也许应该用一些东西,而不是findObjectsInBackgroundWithBlock。不确定。太多的新手不知道什么是最好的方法。你将无法避免使用异步方法之一。如果你用的是Objective-C,我可以给你写一个答案,不幸的是我还没有达到Swift的要求。你看过Parse网站上的教程了吗?也许他们已经更新了一个iOS示例/教程应用程序来使用Swift?是的,自从我遇到这个问题以来,我一直在学习。我可能已经做了一个黑客的工作,因为我没有得到任何回应,但我会看看我的旧代码,看看。无论如何很高兴了解completionHandler:)
func getObjectId(localPersonId:NSString, completionHandler: (currentObjectId: [String]) -> ()){

    var currentObjectId:NSString = ""

    var query = PFQuery(className:"myClass")
    query.whereKey("personId", equalTo:localPersonId)
    //query.whereKey("groupId", equalTo:self.currentGroupId)
    query.findObjectsInBackgroundWithBlock {
        (objects, error) -> Void in
        if error == nil {
            // should not use a for loop since this should
            // only return one row
            for object in objects {
                completionHandler(currentObjectId: currentObjectId)
            }
        } else {
            // Log details of the failure
            NSLog("Error: %@ %@", error!, error!.userInfo!)
        }
    }
}