UIImageView no siempre se muestra

Estoy depurando un problema con una image no mostrada.

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]]; NSLog(@"imageView right after initialization is: %@", imageView); imageView.frame = CGRectMake(2, 0, 316, 45); imageView.layer.zPosition = zPos; NSLog(@"imageView after running the setters: %@", imageView); [self.view addSubview:imageView]; 

La parte extraña es que a veces se visualiza imageView , a veces no (aproximadamente el 75% del time que se muestra).

imageView no se puede acceder a ninguna parte excepto el código anterior.

Lo que noté es que cuando no se muestra imageView , la primera statement de logging muestra que:

imageView justo después de la initialization es: <UIImageView: 0x9eaa760; frame = (0 0; 0 0); userInteractionEnabled = NO; capa = <CALayer: 0x9ec04a0 >>

Cuando se muestra la vista de image:

imageView justo después de la initialization es: <UIImageView: 0xaa61ad0; frame = (0 0; 644 88); opaco = NO; userInteractionEnabled = NO; capa = <CALayer: 0xaa61330 & rt; & rt;

EDITADO: ejecuté decenas de testings, imageView siempre se comporta igual: cuando no se muestra, el marco inicial es (0 0; 0 0). Cuando no es así, siempre hay algún otro valor.

PS, no estoy usando ARC.

En su logging de UIImageView , muestra frame = (0 0; 0 0); Esto significa que la vista no se mostrará ya que tiene un alto y ancho de 0. Lo que indica que la image no tiene tamaño o es nil .

La causa de esto es muy probablemente porque la image que está tratando de cargar no se encuentra: debe comprobar si la image se encuentra o no:

 UIImage *image = [UIImage imageNamed:imageName]; if (!image) { NSLog(@"Image could not be found: %@", imageName); } imageView = [[UIImageView alloc] initWithImage:image]; 

Lo que significa que incluso si cambia el marco, aún no verá nada, ya que no hay image cargada.

¿Por qué no establece el marco primero y configura la siguiente image?

  imageView = [UIImageView alloc]initWithFrame:CGRectMake(0,0,35,35)]; [imageView setImage:[UIImage imageNamed:@"img.png"]]; 

Además de la respuesta de rckoenes, primero debe verificar si la image existe dentro de su ruta de package:

 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:imageName]; if([fileManager fileExistsAtPath:path]) { UIImage *image = [UIImage imageNamed:imageName]; if (!image) { NSLog(@"Image could not be found: %@", imageName); } imageView = [[UIImageView alloc] initWithImage:image]; } else { NSLog(@"%@ is not included in the app file bundle!", imageName); } 

de esa manera sabrás si el problema es b / c, no tienes el file en primer lugar … o b / c, hay algo mal en el file que impide que iOS lo cargue.