2012-09-22 2 views
7

Mise à jour: Ajout du bug 12408800 sur le site d'Apple.iOS: UIPasteboard setImage: échoue sur iOS6 et/ou Xcode 4.5


je copie quelqu'un ou de plusieurs UIImage au UIPasteboard, et il travaille comme gangbusters .. jusqu'à ce que mon téléphone mis à niveau vers iOS 6.

  • Xcode 4.5 avec iOS 5.1 - OK
  • Xcode 4.4 avec iOS 6.0 - également OK (according to this post)
  • Xcode 4.5 avec iOS 6.0 - FAIL

(également testé la distribution par l'intermédiaire TestFlight, pour ce que ça vaut la peine - ne fonctionne toujours pas)

Voici mon code (super de base, etc.):

// add image to clipboard 
UIImage *image = [[UIImage imageNamed:@"testimage"]; 
[[UIPasteboard generalPasteboard] setPersistent:YES]; 
[[UIPasteboard generalPasteboard] setImage:image]; 

Et voici ce qui se passe quand je essayez de coller dans une fenêtre MMS/iMessage (désolé pour une capture d'écran énorme; affichage de la rétine ..):

screenshot_of_failure

..et un exemple d'échec sur l'exemple d'application Messages dans le simulateur iOS6 (voir les deux points d'interrogation ..):

another screenshot!

Comme je l'ai dit, le code ci-dessus a fonctionné pendant des lustres, donc je suis sûr que c'est quelque chose de nouveau.

Des pensées? Sur le post lié, l'auteur suggère de recompiler sur une ancienne version de Xcode - mais cela n'entraînerait-il pas l'arrêt du fonctionnement des autres bibliothèques iOS6?

+0

J'ai vraiment besoin des nouvelles fonctionnalités iOS, malheureusement ... sinon ma rotation est totalement désossée sur iOS 6. Donc, pour l'instant, j'ai complètement enlevé copier/coller de mon application. oy vey. – toblerpwn

Répondre

13

Cela fonctionne pour moi sur Xcode 4.5 pour mes appareils iOS 6.

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];   
NSData *imgData = UIImagePNGRepresentation(@"image"); 
[pasteboard setData:imgData forPasteboardType:[UIPasteboardTypeListImage objectAtIndex:0]]; 
+0

NICE. Fonctionne parfaitement pour moi à la fois 5.1 et 6.0 - lors de la copie d'une image. Que diriez-vous de copier plusieurs images dans le presse-papier, comme dans 'setImages:' de 'UIPasteboard'? – toblerpwn

+1

L'utilisation de setImages: semble toujours ne pas fonctionner. Devinez nous devrons attendre Apple pour comprendre ce qui ne va pas avec Xcode 4.5. – rob1302

+0

Fonctionne parfaitement. Rapidement résolu un peu de panique quand j'ai remarqué que mes applications ne fonctionnaient pas dans iOS6 sans raison! Étrange que cette fonctionnalité a changé mais nous n'avons reçu aucun avertissement ou quoi que ce soit à ce sujet. – Boeckm

1

J'ai envoyé un e-mail au sujet de ce problème au support technique d'Apple Developer et moi avons eu cette réponse:

Nous vous remercions de contacter Apple Developer Support technique. Nos ingénieurs ont examiné votre demande et ont déterminé que cela serait mieux géré comme un rapport de bogue.

Veuillez soumettre un rapport de bogue complet concernant ce problème en utilisant l'outil Bug Reporter au http://bugreport.apple.com.

Il est un bug sûr ...

+0

Bon appel; bug ajouté 12408800 sur le site d'Apple. Rendre compte de leur réponse. – toblerpwn

+0

J'avais également ouvert un support technique pour les développeurs Apple avec ce problème et ensuite je suis venu avec la solution que j'ai posté l'autre jour et je l'ai envoyé à eux. Donc, ils connaissent déjà le problème et j'ai également créé un rapport de bogue. Je me demande si je vais récupérer mon incident de support technique depuis que j'ai répondu à ma propre question pour eux;) – rob1302

7

Pour une seule image, vous devez utiliser:

#import <MobileCoreServices/UTCoreTypes.h> 

Pour JPEG:

NSData *jpegData = UIImageJPEGRepresentation(image, 1.0); 
[[UIPasteboard generalPasteboard] setData:jpegData forPasteboardType:(id)kUTTypeJPEG]; 

ou PNG Pour:

NSData *pngData = UIImagePNGRepresentation(image); 
[[UIPasteboard generalPasteboard] setData:pngData forPasteboardType:(id)kUTTypePNG]; 

et éviter l'indexation directement UIPasteboardTypeListImage.

+1

+1 pour ajouter l'import, que d'autres ont oublié de mentionner. –

+0

vous pouvez également utiliser @ "public.jpeg" au lieu de kUTTTypeJPEG, car c'est une constante publique qui ne changera jamais. Cela vous évite de créer des liens dans une bibliothèque entière pour une constante. –

+0

dans iOS8 J'avais du mal à coller dans l'application Notes, mais le code ci-dessus a fonctionné. Avec le code que je partage ci-dessous, coller dans l'application Messages fonctionnait, mais maintenant les deux fonctionnent: UIPasteboard * pasteBoard = [UIPasteboard generalPasteboard]; \t if (image) { \t \t [pasteBoard setImage: image]; \t} – c0d3Junk13

Questions connexes