【问题标题】:Retrieve object from parse.com and wait with return until data is retrieved从 parse.com 检索对象并等待返回,直到检索到数据
【发布时间】:2015-02-23 13:41:56
【问题描述】:

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

这是我的函数,它返回一个空字符串,因为来自 parse.com 的响应太慢了。如果我在成功区域内放置一个断点,它将在需要数据后“长时间”中断。我想有办法让数据同步,所以它会等待?

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 函数将返回一个空字符串。有人吗?

【问题讨论】:

  • 您需要使您的 getObjectId function 异步。现在,return currentObjectId 行在查询完成之前正在执行。
  • 是的,这就是问题所在。如何使函数异步?
  • 遗憾的是,该链接并没有让我看到我的问题...我想我可能应该使用 findObjectsInBackgroundWithBlock 以外的东西。不确定。新手太多了,不知道什么是最好的方法。
  • 您将无法避免使用其中一种异步方法。如果你使用的是 Objective-C,我可以给你写一个答案,不幸的是我还没有掌握 Swift。您是否查看过 Parse 网站上的教程,也许他们已经更新了他们的 iOS 示例/教程应用程序之一以使用 Swift?

标签: ios swift parse-platform pfquery


【解决方案1】:

我意识到这已经 3 个月大了,但尽管 Parse 文档非常好/有用,但没有太多可以回答 IOS Parse 相关问题的文档。

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

(有关异步上下文中的完成处理程序的更多信息:https://thatthinginswift.com/completion-handlers/

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!)
        }
    }
}

【讨论】:

  • 是的,我虽然有这个问题。自从我没有得到回应以来,我可能已经对此进行了破解,但我会看看我的旧代码并看看。反正;很高兴了解 completionHandler :)
猜你喜欢
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多