2016-12-07 5 views
0

Ich versuche gerade, ein Benutzerprofilbild einzurichten. Ich habe der Benutzer ein Bild, das auf Firebase hochgeladen wird, aber ich möchte dieses Bild herunterladen und zwischenspeichern. Ich habe jetzt Probleme mit dem Herunterladen, nachdem ich das behoben habe, werde ich mich darum kümmern, es zu cachen.Image herunterladen, dann Cache von Firebase Swift 3

// Uploading Images to Firebase 
func uploadImageToFirebaseStorage(data: NSData) { 
    let storageRef = FIRStorage.storage().reference(withPath: "myPics/profilePic.jpg") 
    let uploadMetaData = FIRStorageMetadata() 
    uploadMetaData.contentType = "image/jpeg" 
    let uploadTask = storageRef.put(data as Data, metadata: uploadMetaData) { (metadata, error) in 
     if (error != nil) { 
      print("I Received an error \(error?.localizedDescription)") 
     } else { 
      print("Upload Complete! Here is the MetaData \(metadata?.downloadURL())") 
     } 

    } 

Nun, was ich habe Probleme mit der Ausgabe Navigator mit:

Issue Navigator

Es hat dieses Problem auf reference = self.storage. Vielen Dank im Voraus!

Antwort

1

Speicher wurde nicht als Eigenschaft der Klasse deklariert, sie wurde innerhalb dieser Methode deklariert. Selbst wenn es als Eigenschaft der Klasse deklariert wurde, müssen Sie sich in swift nicht mehr selbst vor eine Klasseneigenschaft stellen, es sei denn, Sie befinden sich in einer Sperrung.

Entweder tun:

func downloadImageUserFromFirebase() { 
    let storage = FIRStorage.storage() 
    var reference: FIRStorageReference! 
    //all I did here was remove self before storage 
    reference = storage.referenceForURL("gs:URL.appspot.com") 
    reference.downloadURL { (url, error) in 
    let data = NSData(contentsOf: url!) 
    let image = UIImage(data: data! as Data) 
    self.profileImageView.image = image 
    } 
} 

oder idealerweise umstrukturieren den Code:

class ProfileViewController: UIViewController { 

    //here we are initializing it as a property of the class 
    let storage = FIRStorage.storage() 

    func downloadImageUserFromFirebase() { 
    var reference: FIRStorageReference = storage.referenceForURL("gs:URL.appspot.com") 
    reference.downloadURL { (url, error) in 
     //using a guard statement to unwrap the url and check for error 
     guard let imageURL = url, error == nil { 
     //handle error here if returned url is bad or there is error 
     return 
     } 
     guard let data = NSData(contentsOf: imageURL) else { 
     //same thing here, handle failed data download 
     return 
     } 
     let image = UIImage(data: data) 
     self.profileImageView.image = image 
    } 
    } 

}