¿Cómo recargar los datos de UITableView después de que Firebase finalice la descarga de los datos del usuario?
Así que tengo un problema con Firebase porque es asíncrono y no sé cómo trabajar con eso correctamente. Mi aplicación tiene una fuente de productos para la venta, que obtengo de la base de datos de Firebase y el almacenamiento de Firebase (imágenes). El problema es que no sé cuándo o cómo volver a cargar mi UITableView para obtener todos los datos sin obtener un error nulo. Y es aún más complicado, porque primero necesito obtener mi información de post venta de firebase y solo después de eso puedo obtener información de usuario que también está en la celda de vista de tabla.
Así es como obtengo mi venta
func getSalePosts() -> [SalePost]{
var salePosts = [SalePost]()
FIR_DATABASE_SALE_POSTS.queryLimitedToFirst(NUMBER_OF_LOADED_POSTS).observeEventType(.Value, withBlock: { (snapshot) in
for snap in snapshot.children{
let imgString = snap.value["image"] as! String!
let imgNSURL = NSURL(string: imgString)
let imgNSDATA = NSData(contentsOfURL: imgNSURL!)
let downloadedImg = UIImage(data: imgNSDATA!)
let newSalePost = SalePost(title: snap.value["title"] as! String!,
userUID: snap.value["authorUID"] as! String!,
postBody: snap.value["body"] as! String!,
amountAvailable: snap.value["amountAvailable"] as! String!,
unit: snap.value["unit"] as! String!,
price: snap.value["price"] as! String!,
image: downloadedImg!)
salePosts.append(newSalePost)
print("num of posts \(salePosts.count)")
}
}) { (error) in
print(error.localizedDescription)
}
return salePosts
}
Y esta es la función que está obteniendo UserInfo (obtendré el "userUID" del objeto salePost)
func getProducer(userUID:String) -> Producer{
var newProducer:Producer?
FIR_DATABASE_USERS.child(userUID).observeEventType(.Value, withBlock: { (snap) in
print(snap.description)
let imgString = snap.value!["profilePic"] as! String!
let imgNSURL = NSURL(string: imgString)
let imgNSDATA = NSData(contentsOfURL: imgNSURL!)
let downloadedImg = UIImage(data: imgNSDATA!)
let someProducer = Producer(
displayName: snap.value!["displayName"] as! String!,
address: snap.value!["address"] as! String!,
mobile: snap.value!["mobile"] as! String!,
email: snap.value!["email"] as! String!,
password: "",
bio: snap.value!["bio"] as! String!,
profilePic: downloadedImg!,
openingHour: snap.value!["openingHour"] as! String!,
closingHour: snap.value!["closingHour"] as! String!)
newProducer = someProducer
print(newProducer?.description)
}) { (error) in
print(error.localizedDescription)
}
return newProducer!
}
Entonces, como dije, no sé cuándo, dónde y cómo llamar a estas funciones (en mi controlador de alimentación) para que sea "sincrónico" y para que todos esos datos lleguen a las celdas de la vista de tabla correctamente. Agradeceré toda ayuda. Intenté googlearlo e incluso encontrarlo aquí, pero nada me ayudó.