0
我想填充我的表格,并且正在从Firebase获取几个不同的数据。我的一个代码如下:回复:使用Firebase Swift更新数据的GCD
//Firebase
let ref = FIRDatabase.database().reference()
let dataLoad = DispatchGroup()
let backgroundQ = DispatchQueue(label:"queue", attributes: .concurrent)
ref.child("Vendor Reviews/\(id)").observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
dataLoad.enter()
backgroundQ.async(group: dataLoad, execute: {
let snap = child as! FIRDataSnapshot
let dict = snap.value as? NSDictionary
let username = dict?["username"] as! String
let rating = dict?["rating"] as! Double
let review = dict?["review"] as! String
let image = dict?["image"] as! String
let timestamp = dict?["date"] as! TimeInterval
let rawDate = NSDate(timeIntervalSince1970: timestamp)
let date = String(describing: rawDate)
let comment = VendorCommentCellData(img: image, name: username, date: date, comment: review, rating: rating)
comments += [comment]
print("Added 1")
dataLoad.leave()
})
}
})
dataLoad.notify(queue: DispatchQueue.main){
print("All added")
}
出于某种原因,在控制台日志,打印(“所有加入”)总是出现打印之前(“加1”),因此,我不能知道我的数据何时被检索,因此无法填充我的表格。
我在Swift 2中得到了这个工作,并且以相同的方式写了它,但它不起作用。
请让我知道我的代码出错了。我是新手,我对GCD不太满意。希望大家都能指出我的正确方向。
谢谢。
感谢您的建议。我在backgroundQ部分添加了一个打印件,但打印完“全部添加”后它仍然打印出来 –
取出:dataLoad.enter()和dataLoad.leave() –