2017-10-17 4 views
0

Ich brauche Hilfe beim Anhängen eines Bildes, das ich von Firebase heruntergeladen habe, damit ich es nutzen kann, um es über den UIActivityViewController zu teilen. Ich bekomme das richtige Bild, bin mir aber nicht sicher, wie ich den Datenpass einrichten soll, damit er geteilt werden kann. Das aktuelle Setup wirft einen "Thread 1 Fehler" auf "objectsToShare = [self.image!]".Swift Firebase Bild anhängen für UIActivityViewController

let shareAction = UIAlertAction(title: "Share", style: UIAlertActionStyle.default, handler: {(alert: UIAlertAction!) in 
     var objectsToShare: [AnyObject]? 


     let titlePost = self.feeds[sender.tag].downloadURL 

     if let postURL = URL(string: titlePost) { 
      let postRequest = URLRequest(url: postURL) 
      self.image?.setImageWith(postURL, placeholderImage: nil, options: SDWebImageOptions.progressiveDownload, completed: { (imageRequest, imageResponse, error) -> Void in 
       // failure downloading image 
       print("Error downloading Firebase post image") 
       print(error) 
      }) 
     } 

     objectsToShare = [self.image!] 
     let activityViewController = UIActivityViewController(activityItems: objectsToShare!, applicationActivities: nil) 

     // present the view controller 
     self.present(activityViewController, animated: true, completion: nil) 
    }) 

Antwort

0

Anstelle des unter:

objectsToShare = [self.image!] 

Sie haben wie folgt zu verwenden:

if let image = self.image { 
     objectsToShare.append(image) 
} 
+0

"objectsToShare" als Null zu bekommen. Vielleicht werde ich das Bild nicht korrekt herunterladen? –

+0

Es wird einige Zeit dauern, bis das Bild richtig geladen ist. Zu der Zeit, zu der Sie das Bild zuweisen, wird es möglicherweise nicht heruntergeladen. Verschieben Sie diesen Code in den Abschlussblock und testen Sie ihn dann. –

0

Sie sollten überprüfen, was für ein Abschluss-Handler zuerst ist.

Sie sollten auf Fehler in der Fertigstellung prüfen, und wenn nicht, tun Sie, was Sie mit Ihrem Bild tun müssen. Da die Anfrage asynchron ist, ist das Bild noch nicht auf der Zeile unmittelbar danach. so etwas tun:

self.image?.setImageWith(postURL, placeholderImage: nil, options: SDWebImageOptions.progressiveDownload, completed: { (imageRequest, imageResponse, error) -> Void in 
    // This closure is called when the request is done 
    if error == nil { 
     objectsToShare = [self.image!] 
     let activityViewController = UIActivityViewController(activityItems: objectsToShare!, applicationActivities: nil) 
     // present the view controller 
     self.present(activityViewController, animated: true, completion: nil) 
    } else { 
     // failure downloading image 
     print("Error downloading Firebase post image") 
     print(error) 
    } 
}) 
+0

Vielleicht möchten Sie Ihre Antwort noch einmal überprüfen. Viele Fehler. –

+0

Überprüfen Sie es jetzt, ich habe 2 Zeilen dupliziert. Wenn es immer noch Fehler gibt, kommt es von Ihrem Code, weil ich nur kopiere es einfügen und neu anordnen. Ich erklärte, was Sie tun sollten, so sollte es auch für einen Anfänger Entwickler reichen. –

+0

Ich bekomme diese Warnung für "if error == nil" "Vergleicht nicht-optionale Wert des Typs 'SDImageCacheType' zu Null immer false zurück" –

Verwandte Themen