2012-06-21 5 views
6

Estoy construyendo una aplicación de gestión de archivos, y de vez en cuando me sale el siguiente error al llamar a un UIImagePickerController o una MPMediaPickerController:iOS UIAppearance error

*** -[_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0x140dc0 

recientemente he dado mi aplicación un tema personalizado utilizando el IOS de 5 UIAppearance API y eso es cuando comencé a recibir este error. Por adivinar y comprobar, me encontré con las líneas problemáticas de mi código que producir este error:

UIImage *backButtonImage = [[UIImage imageNamed:@"backButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(12, 16, 12, 8)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
UIImage *barButtonImage = [[UIImage imageNamed:@"barButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(14, 12, 14, 12)]; 
[[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

no tengo ni idea de cómo este código desencadena el error anterior. ¿Puede explicarme el origen de este error y proporcionar una solución para solucionarlo?

Gracias de antemano por su ayuda, Guvvy

+2

Para aquellos mala suerte de estar viendo este accidente, aquí hay otro recurso muy útil: http://openradar.appspot.com/11411000 – jpm

+0

sabemos ¿Por qué sucede esto todavía? Estoy obteniendo lo mismo en iOS 6. Estoy dibujando a medida mis propias imágenes de 20x20 y tengo insertos de 9 en todos los lados ... – bogardon

+0

@bogardon ¿Estás recibiendo este bloqueo en dispositivos sin retina? – Gavy

Respuesta

3

Después de algunas pruebas más a fondo, he llegado a la conclusión de que este problema se limita a dispositivos de retina. El problema resultó ser en las imágenes @ 2x. Tenían una resolución impar (por ejemplo, 59px por 60px). Todo lo que hice fue recrear la imagen y cambié la resolución a 60px por 60px y nunca volví a experimentar el problema.

Me sorprendió la solución porque no vi ninguna correlación entre el mensaje de error y la línea de código, pero al final, fueron las imágenes las que causaron este problema.

+0

Mis imágenes @x2 no tienen una resolución de número impar, pero este bloqueo todavía se produce ocasionalmente ... – Qusic

2

Tuve un similar problem, pero mi bloqueo fue causado por una imagen de tamaño variable en un UIImageView.

Mi imagen redimensionable tiene bordes en la parte superior = 30px, izquierda = 20px, inferior = 1px, derecha = 10px. La imagen es 43x45, por lo que su área redimensionable es 13x14. Estoy usando iOS6, así que pude solucionar el problema especificando UIImageResizingModeStretch como resizingMode para -[UIImage resizableImageWithCapInsets:resizingMode:].

Obras:

UIImage *image = [UIImage imageNamed:name]; 
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeStretch]; 

bloquea con EXC_BAD_ACCESS o [_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0xb14deb0 con NSZombieEnabled:

UIImage *image = [UIImage imageNamed:name]; 
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets]; 
0

me dieron el mismo para el siguiente código

UIImage* image = [UIImage stretchableImageNamed:@"imageName"]; 
self.backgroundView = [[UIImageView alloc] initWithImage:image]; 
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:image]; 

donde self es UITableViewCell y stretchableImageNamed: es simplemente

+(UIImage*)stretchableImageNamed:(NSString*)name 
{ 
    UIImage *img = [UIImage imageNamed:name]; 
    CGSize sz = img.size; 
    int left = (sz.width - 1.)/2.; 
    int top = (sz.height - 1.)/2.; 
    return [img resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, top, left)]; 
} 

esto ayudó:

self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage stretchableImageNamed:@"imageName"]]; 
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage stretchableImageNamed:@"imageName"]]; 
Cuestiones relacionadas