Swift和Parse findobjectsinbackgroundithblock不返回我的数组
当编译器到达findObjectsInBackgroundWithBlock的末尾时,my CoordinateArray将丢失值,函数将返回空数组。你能帮忙吗? 先谢谢你Swift和Parse findobjectsinbackgroundithblock不返回我的数组,swift,parse-platform,Swift,Parse Platform,当编译器到达findObjectsInBackgroundWithBlock的末尾时,my CoordinateArray将丢失值,函数将返回空数组。你能帮忙吗? 先谢谢你 func getSquadMembersCoordinates() -> Array<PFGeoPoint> { var coordinatesArray:[PFGeoPoint] = [PFGeoPoint]() if user != nil { let us
func getSquadMembersCoordinates() -> Array<PFGeoPoint> {
var coordinatesArray:[PFGeoPoint] = [PFGeoPoint]()
if user != nil {
let userSquad = PFUser.currentUser()?["inSquad"] as? String
let query = PFUser.query()
query?.whereKey("username", notEqualTo: (PFUser.currentUser()? ["username"])!)
query?.whereKey("inSquad", equalTo: userSquad!)
query?.whereKey("visible", notEqualTo: false)
query?.findObjectsInBackgroundWithBlock {
(results: [PFObject]?, error: NSError?) -> Void in
if error == nil {
if results?.count != 0 {
if let results = results {
for object in results {
coordinatesArray.append(object.objectForKey("location") as! PFGeoPoint)
}
}
} else {
print("No Squad Members or not visible")
}
} else {
print ("\(error)")
}
}
} else {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SquadVC")
self.presentViewController(viewController, animated: true, completion: nil)
})
}
print("\(coordinatesArray.count)")
return coordinatesArray
}
func getSquadMembersCoordinates()->数组{
变量坐标阵列:[PFGeoPoint]=[PFGeoPoint]()
如果用户!=nil{
让userSquad=PFUser.currentUser()?[“inSquad”]作为?字符串
let query=PFUser.query()
查询?.whereKey(“用户名”,notEqualTo:(PFUser.currentUser()?[“用户名”])!)
查询?.whereKey(“inSquad”,equalTo:userSquad!)
查询?.whereKey(“可见”,notEqualTo:false)
查询?.findObjectsInBackgroundWithBlock{
(结果:[PFObject]?,错误:NSError?->Void in
如果错误==nil{
如果结果为?.count!=0{
如果让结果=结果{
对于结果中的对象{
CoordinateArray.append(object.objectForKey(“位置”)作为!PFGeoPoint)
}
}
}否则{
打印(“无团队成员或不可见”)
}
}否则{
打印(“\(错误)”)
}
}
}否则{
dispatch\u async(dispatch\u get\u main\u queue(),{()->Void in
让viewController:UIViewController=UIStoryboard(名称:“Main”,bundle:nil)
self.presentViewController(viewController,动画:true,完成:nil)
})
}
打印(\(CoordinateArray.count)“)
返回坐标阵列
}
在提取完成之前,您的代码到达返回行。您需要一些类似于通知的东西,以便在抓取完成后更新数据。这是因为调用是异步的。你不能那样退。闭嘴。我的朋友,我对这个编程很在行!我该怎么做?您需要重新构造此方法的设计,以接受闭包作为参数,并以findObjectsInBackgroundWithBlock的结果作为参数调用该闭包。尝试本教程:助教的帮助…将学习更多的教程:)Tks所有的提示。我终于成功了:)