2012-09-22 22 views
7

Actualización: Se agregó el error 12408800 en el sitio de Apple.iOS: UIPasteboard setImage: falla en iOS6 y/o Xcode 4.5


estoy copiando a alguien o múltiple UIImage a la UIPasteboard, y ha estado trabajando como frenética .. hasta que mi teléfono actualizado a iOS 6.

  • Xcode 4.5 con iOS 5.1 - OK
  • Xcode 4.4 con iOS 6.0 - también OK (according to this post)
  • Xcode 4.5 con iOS 6.0 - FALL

(también probó la distribución a través de TestFlight, por lo que vale la pena - todavía falla)

Aquí está mi código (super básica, etc.):

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

Y aquí es lo que sucede cuando intente pegar en una ventana de MMS/iMessage (lo siento por una gran captura de pantalla; pantalla de la retina ..):

screenshot_of_failure

..y un ejemplo de un fracaso en la aplicación de mensajes muestra en el simulador de iOS 6 (ver los dos signos de interrogación ..):?

another screenshot!

Como dije, el código anterior ha estado funcionando durante años, así que estoy seguro de que esto es algo nuevo.

¿Alguna idea? En la publicación vinculada, el autor sugiere volver a compilar en una versión anterior de Xcode, pero ¿eso no haría que otras bibliotecas iOS6 dejaran de funcionar?

+0

Necesito las nuevas características de iOS, desafortunadamente ... de lo contrario mi rotación está totalmente deshuesada en iOS 6. Así que, por ahora, eliminé copiar/pegar de mi aplicación por completo. oy vey. – toblerpwn

Respuesta

13

Esto funciona para mí en Xcode 4.5 para mis dispositivos iOS 6.

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

NIZA. Funciona perfectamente para mí en 5.1 y 6.0, al copiar una imagen. ¿Qué tal copiar varias imágenes al portapapeles, como en 'setImages:' de UIPasteboard'? – toblerpwn

+1

Uso de setImages: parece que todavía no funciona. Supongo que tendremos que esperar a que Apple descubra qué es lo que está mal con Xcode 4.5. – rob1302

+0

Funciona perfectamente. Resolví rápidamente un poco de pánico cuando noté que mis aplicaciones no funcionaban en iOS6 sin ninguna razón. Es extraño que esta funcionalidad haya cambiado, pero no recibimos advertencias ni nada al respecto. – Boeckm

1

envié un correo electrónico sobre este tema a Apple Developer Soporte Técnico y me dieron esta respuesta:

Gracias por ponerse en contacto con Apple Developer Soporte Técnico. Nuestros ingenieros han revisado su solicitud y han determinado que esto se trataría mejor como un informe de error.

Envíe un informe de error completo con respecto a este problema utilizando la herramienta Bug Reporter en http://bugreport.apple.com.

Así que es un error seguro ...

+0

Buena llamada; Se agregó el error 12408800 en el sitio de Apple. Reportará con su respuesta. – toblerpwn

+0

También había abierto un Soporte técnico para desarrolladores de Apple con este problema y luego se me ocurrió la solución que publiqué el otro día y se la envié. Así que ya saben sobre el problema y también he creado un informe de error. Me pregunto si recuperaré mi Incidente de soporte técnico ya que respondí mi propia pregunta;) – rob1302

7

para una sola imagen, se debe utilizar:

#import <MobileCoreServices/UTCoreTypes.h> 

Para JPEG:

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

o PNG Para:

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

y evitar la indexación directamente en UIPasteboardTypeListImage.

+1

+1 para agregar el #import, que otros no mencionaron. –

+0

también puede usar @ "public.jpeg" en lugar de kUTTTypeJPEG, ya que es una constante pública que nunca cambiará. Esto le ahorra vincular en una biblioteca completa una constante. –

+0

en iOS8 Tenía problemas para pegar en la aplicación de Notes, pero el código anterior funcionaba. Con el código que comparto a continuación, pegar en la aplicación Mensajes funcionaba, pero ahora ambos funcionan: UIPasteboard * pasteBoard = [UIPasteboard generalPasteboard]; \t if (imagen) { \t \t [pasteBoard setImage: image]; \t} – c0d3Junk13

Cuestiones relacionadas