2017-05-21 12 views
0

Firebase-Speicherabbild wird in Tabellenansicht nicht heruntergeladen. Wenn ich die Zeile ersetzen let tempImageRef = storage.child ("myFiles/sample.jpg"), wird das einzelne Bild angezeigt. Aber wenn Sie versuchen, alle Bilder in 'myFiles' zu erfassen, funktioniert es nicht. Bitte helfen SieFirebase-Speicherabbild wird nicht in Tabellenansicht heruntergeladen

func fetchPhotos() 
    { 
     //let database = FIRDatabase.database().reference() 
     let storage = FIRStorage.storage().reference(forURL: "gs://fir-test-bafca.appspot.com") 
     let tempImageRef = storage.child("myFiles/") 

     tempImageRef.data(withMaxSize: (1*1024*1024)) { (data, error) in 
      if error != nil{ 
       print(error!) 
      }else{ 
       print(data!) 

       let pic = UIImage(data: data!) 
       self.picArray.append(pic!) 

       DispatchQueue.main.async { 
        self.tableView.reloadData() 
       } 
      } 
     } 
} 
+0

Können Sie Ihre 'UITableViewDataSource' Methoden posten? – orxelm

Antwort

3

Sie beziehen sich auf einen gesamten Ordner (myFiles/). Das wird nicht funktionieren. Sie müssen jedes Bild einzeln referenzieren.

Eine Möglichkeit besteht darin, die Bildmetadaten in Ihre Echtzeitdatenbank zu schreiben, wenn Sie ein Bild hochladen. Lies dann die Metadaten (genauer den Pfad) und referenziere das Bild auf diese Weise.

Wenn Sie 3 Bilder haben möchten Sie laden und zu speichern, können Sie die Metadaten wie folgt schreiben:

/images 
    /image1key 
    /metdata 
     /path 
    /image2key 
    /metdata 
    /path 
    /image3key 
    /metdata 
     /path 

Dann können Sie Ihre Datenbank für Ihre Bilder Pfad Abfrage wie so

let ref = Firebase.database().ref("images") 
ref.observe(.value, withCompletion: { snapshot in 
    if let values = snapshot.value as? [String : Any] { 
    if let metadata = values["metadata"] as? [String: Any] { 
     let imagePath = metadata["path"] 
     //Now download your image from storage. 
    } 
    } 
}) 

Dies ist nicht der sauberste Code und Sie können definitiv verbessern, aber es wird funktionieren :)

+1

Als Addendum; Die Struktur könnte vereinfacht werden, indem nur die Pfade als Schlüssel gespeichert werden: Wertpaare wie/images/image1key: image1Path und/images/image2key: image2path. Das würde den Code erheblich vereinfachen. Aber ... Wenn das OP mehr als nur den Pfad zum Bild speichern möchte (vielleicht einen Bildnamen oder andere Daten), ist Ihr Setup die richtige Lösung. – Jay

+0

Ja, ich habe es getan & es funktioniert gut.Erstens habe ich diese Fotos in Firebase Storage hinzugefügt und dann diese Fotos "Download-Link" in einem Knoten der Firebase-Datenbank hinzugefügt. Danach kann ich diese Fotos in tableview leicht abrufen. Vielen Dank ... –

Verwandte Themen