2017-06-26 2 views
0

J'implémente une extension de partage qui envoie des images à un serveur pour le calcul. En plus de mon progress bar issues, je ne suis pas en mesure d'utiliser les images de l'application Twitter. Voici le code que j'utilise qui fonctionne dans de nombreuses autres applications tierces.Impossible de charger des images à partir de l'application Twitter dans l'extension de partage

if let inputItem = extensionContext!.inputItems.first as? NSExtensionItem { 
      if let itemProvider = inputItem.attachments?.first as? NSItemProvider { 
       if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) { 
        itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String) { [unowned self] (imageData, error) in 
         let url = imageData as! URL 
         self.sendToServer(localUrl: url) 
        } 
       } 
      } 
     } 

L'erreur que j'ai est le suivant: Could not cast value of type 'NSConcreteData' (0x1a8d45700) to 'NSURL' (0x1a8d36a10) et se produit pour cette partie du code let url = imageData as! URL. Il semble que l'article est de type image. Une idée de ce qui se passe alors que cela fonctionne pour les autres applications?

Merci pour votre aide.

Répondre

0

J'ai réussi à corriger cela en utilisant le code suivant, qui prend en compte les différentes façons dont la photo est passée par le itemProvider.

itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String){ [unowned self] (data, error) in 
          let myImage: UIImage? 
          switch data { 
          case let image as UIImage: 
           myImage = image 
          case let data as Data: 
           myImage = UIImage(data: data) 
          case let url as URL: 
           let imageData = NSData(contentsOf: url.absoluteURL) 
           myImage = UIImage(data: imageData! as Data) 
          default: 
           //There may be other cases... 
           print("Unexpected data:", type(of: data)) 
           myImage = nil 
          } 
          self.sendToServer(imageData: myImage!, imageName: myImageName) 
         }