2
我有一個查詢設置爲從數據庫中提取數據(由heroku託管的Parse-server)並將其附加到數組;在這個查詢中是另一個用於從不同類中提取信息的查詢,但也用於追加另一個數組。我想因爲我使用.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
的追加程序已經完成? (另外,它發生異步導致問題的事實是猜測......我可能是錯的)
shallowThought,我試圖做你的建議(看看編輯的問題代碼塊......我把'完成()'在那裏...它總是被封裝在一個函數中,我只是沒有顯示那一點)。但是,第二個打印語句仍然返回0.任何想法? –
按照書面說明,您正在打印數據之前的計數。把你的'print()'語句放到你的完成塊中(或者在完成!()'調用之前)。正如我編輯的答案。 – shallowThought