retorno rápido de Firebase en tarea asincrónica
Tengo un problema con Firebase SDK para iOS en Swift 2. Estoy tratando de configurar una imagen para descargar desde el almacenamiento de Firebase. Cuando llamo a la función, devuelve nil. Creo que es porque la tarea de descarga proporcionada por el sdk de Firebase es asíncrona, por lo que cuando el estado de retorno se llama uid, lo que es necesario no se establece porque la tarea no ha terminado. ¿Cómo puedo resolver esto para que me devuelvan la imagen correcta?
override func viewDidLoad() {
super.viewDidLoad()
imageView.image = downloadProfilePicFirebase()
}
La función de descarga de Firebase:
func downloadProfilePicFirebase() -> UIImage{
print("download called")
//local paths
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentDirectorPath:String = paths[0]
let imagesDirectoryPath = documentDirectorPath.stringByAppendingString("/profiles")
var uid = String()
if let user = FIRAuth.auth()?.currentUser {
let uid = user.uid
let storageRef = FIRStorage.storage().referenceForURL("gs://myid.appspot.com")
let profilePicRef = storageRef.child("/profile_pic.jpg")
let homeDir: NSURL = NSURL.fileURLWithPath(NSHomeDirectory())
let fileURL: NSURL = homeDir.URLByAppendingPathComponent("Documents").URLByAppendingPathComponent("profiles").URLByAppendingPathComponent("profile_pic").URLByAppendingPathExtension("jpg")
// Download to the local filesystem
let downloadTask = profilePicRef.writeToFile(fileURL) { (URL, error) -> Void in
if (error != nil) {
print(error)
} else {
// svaed localy now put in ImageView
}
}
}
return UIImage(contentsOfFile: "\(imagesDirectoryPath)"+"/profile_pic_user_"+uid+".jpg")!
}