Ios 从parse.com检索对象并使用return等待,直到检索到数据
如何等待从parse.com检索到数据 因为parse.com的响应太慢,所以我有一个返回空字符串的函数。如果我将断点放在成功区域内,它将在需要数据后中断“long”。我想有一种方法可以让数据同步,让它等待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
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!)
}
}
}