【发布时间】:2016-12-16 17:23:29
【问题描述】:
我设置了一个查询来从数据库(由 heroku 托管的解析服务器)中提取数据并将其附加到数组中;在此查询中是另一个查询,用于从不同的类中提取信息,但也用于附加另一个数组。我认为因为我使用.findObjectsinBackground 它是异步发生的,这导致了一个问题。这是代码(概括):
func getQueries(completion: (() -> Void)?){
let searchQuery = PFQuery(className: "Etc")
searchQuery.findObjectsInBackground(block: { (objects, error) in
if let objectss = objects{
for object in objectss {
//append some arrays
let otherQuery = PFQuery(className: "OtherClass")
otherQuery.whereKey("user", equalTo: object["User"] as String)
otherQuery.findObjectsInBackground(block: {(objects, error) in
if let objectss = objects{
for object in objectss{
array.append(object["ProfPic"] as PFFile)
print("\(array) and its count is \(array.count)") //this returns a non 0 value
}
}
completion!()
})
print("\(array) and its count is \(array.count)") //this returns 0
}
}
})
}
array 的计数在附加到其自己的闭包中后返回为非 0,但在其闭包之外返回为 0。这是一个问题,因为数组用于迭代显示信息。无论如何要确保在完成searchQuery 的整体关闭之前,otherQuery 的附加已经完成?
(此外,它是异步发生导致问题的事实是一个猜测......我可能是错的)
【问题讨论】:
标签: swift multithreading grand-central-dispatch parse-server