我需要使用查询将数据放入数组中,但它只能在块中使用。我在这里搜索并发现它是因为findObjectsInBackgroundWithBlock是异步的,但是我怎么能让它同步呢?
var cities = [String]()
func loadCityArray() {
let citiesVisited = PFQuery(className: "Trips")
citiesVisited.whereKey("userId", equalTo: (PFUser.currentUser()?.objectId)!)
citiesVisited.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let objects = objects {
for object in objects {
let city = object["cityId"] as! String
let query = PFQuery(className: "Cities")
query.whereKey("objectId", equalTo: city)
query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if let objects = objects {
for object in objects {
self.cities.append(object["cityName"] as! String)
}
}
})
}
}
答案 0 :(得分:0)
您不希望在主线程上进行同步。强烈建议不要这样做。
您希望在实例变量中存储请求所需的内容,并告知相应的View Controller新值存在于块中。
修改强>:
假设您有一个等待使用数据的对象:
var chart : DataConsumer?
在您获取数据的块中,
chart.useData(data)
编辑2 :
useData
函数应跟踪数据集中的更改并使用新数据到达的信息。例如,通过显示它。