2016-12-22 19 views
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不太满意。希望大家都能指出我的正确方向。

谢谢。

回答

0

尝试

let dataLoad = DispatchGroup() 
let backgroundQ = DispatchQueue(label:"queue") 

backgroundQ.async(group: dataLoad) { 
//etc.. 
} 

dataLoad.notify(queue: DispatchQueue.main){ 
    print("All added") 
} 
+0

感谢您的建议。我在backgroundQ部分添加了一个打印件,但打印完“全部添加”后它仍然打印出来 –

+0

取出:dataLoad.enter()和dataLoad.leave() –