2017-10-17 15 views
0

J'ai besoin d'aide pour ajouter une image que j'ai téléchargée à partir de firebase afin de pouvoir l'utiliser pour partager sur UIActivityViewController. Je reçois la bonne image, mais je ne sais pas comment configurer le passage de données pour qu'il soit partagé. La configuration actuelle renvoie une "erreur Thread 1" sur "objectsToShare = [self.image!]".Swift Firebase Ajouter une image pour 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) 
    }) 

Répondre

0

la place du ci-dessous:

objectsToShare = [self.image!] 

Vous devez utiliser comme ceci:

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

obtenir "objectsToShare" comme nul. Peut-être que je ne télécharge pas l'image correctement? –

+0

Le chargement de l'image prendra du temps. Au moment où vous assignez l'image, il se peut que ce ne soit pas le téléchargement. Déplacez donc ce code dans le bloc d'achèvement, puis testez-le. –

0

Vous devriez vérifier ce qu'un gestionnaire d'achèvement est le premier.

Vous devriez vérifier l'erreur dans la fin, et si ce n'est pas, faites ce que vous avez à faire avec votre image. Comme la requête est asynchrone, l'image n'est pas encore sur la ligne juste après. Faire quelque chose comme ça:

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

Vous pourriez vouloir re-vérifier votre réponse. Beaucoup d'erreurs. –

+0

Vérifiez maintenant, j'ai fait doubler 2 lignes. S'il y a encore des erreurs, cela vient de votre code parce que je ne fais que copier le coller et le réarranger. J'ai expliqué ce que vous devriez faire donc cela devrait suffire même pour un développeur débutant –

+0

Je reçois cet avertissement pour "if error == nil" "Comparer la valeur non-facultative de type 'SDImageCacheType' à zéro retourne toujours false" –