Я общался с группами отправки и задаюсь вопросом, как повлияет на размещение обратного вызова уведомления группы отправки, когда будет вызван обратный вызов. Я читаю данные из своей базы данных, а затем получаю изображение для каждого элемента в прочитанных данных. Когда у меня есть уведомление за пределами исходного блока чтения базы данных, я замечаю, что он вызывается немедленно, однако, когда уведомление внутри блока, он ведет себя надлежащим образом. Вот мой код:Отправка группы уведомлений?
override func viewDidAppear(_ animated: Bool) {
let ref = FIRDatabase.database().reference().child("users").child((FIRAuth.auth()?.currentUser?.uid)!).child("invites")
ref.observeSingleEvent(of: .value, with: { snapshot in
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for child in snapshots {
self.dispatchGroup.enter()
let info = petInfo(petName: child.value! as! String, dbName: child.key)
print(info)
self.invitesData[info] = UIImage()
let picRef = FIRStorage.storage().reference().child("profile_images").child(info.dbName+".png")
picRef.data(withMaxSize: 1024 * 1024) { (data, error) -> Void in
if error != nil {
print(error?.localizedDescription ?? "Error getting picture")
}
// Create a UIImage, add it to the array
self.invitesData[info] = UIImage(data: data!)!
self.dispatchGroup.leave()
}
}
self.dispatchGroup.notify(queue: DispatchQueue.main, execute: {
print("YOOO")
self.invitesArray = Array(self.invitesData.keys)
print(self.invitesArray)
self.inviteTable.reloadData()
})
}
})
}
Этот код ведет себя правильно, когда уведомление находится в исходном блоке чтения базы данных. Однако, если я поместил это после блока ref.observeSingleEvent
, уведомление будет вызвано немедленно.
Может кто-нибудь, пожалуйста, объясните мне это?
Если у вас есть за пределами блока, то уведомляют получает достигнуто до любой достигнуты ваши вызовы 'self.dispatchGroup.enter()'. – dan