2012-03-07 18 views
8

Tengo este código tratando de ejecutar un conjunto simple de imágenes en un ciclo. Todo lo que tengo en la aplicación se declara una UIImageView en mi archivo .h Vista del controlador:[UIImageView _isResizable]: selector no reconocido enviado a la instancia SIGABRT

@property (strong, nonatomic) IBOutlet UIImageView *imageDisplay; 

y la siguiente en el método viewDidLoad de mi archivo .m:

NSMutableArray *imageView = [[NSMutableArray alloc] init]; 
[imageView addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"EyeAnim1.png"]]]; 
[imageView addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"EyeAnim2.png"]]]; 
[imageView addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"EyeAnim3.png"]]]; 
[imageView addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"EyeAnim4.png"]]]; 
[imageView addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"EyeAnim5.png"]]]; 
[imageView addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"EyeAnim6.png"]]]; 
[imageView addObject:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"EyeAnim7.png"]]]; 

imageDisplay.animationImages = imageView; 
imageDisplay.animationDuration = 0.25; 
imageDisplay.animationRepeatCount = 50; 
[imageDisplay startAnimating]; 

El código parece estar rompiendo en la línea "imageDisplay.animationImages", como si creara el UIImageView, creara su getter y setter, y compilara, está bien hasta que descomente esa línea. Si lo descompongo, me sigue dando el error hasta que elimine el UIImageView y cree uno nuevo.

No estoy muy seguro de lo que está pasando, ¡cualquier ayuda apreciada!

+0

Cuando dice que se bloquea, ¿cuál es el error específico con el que se bloquea? – Will

Respuesta

13

animationImages array DEBE contener solo objetos UIImage. Su matriz contiene objetos UIImageView.

También su código no es seguro: si uno de los recursos no existe, la aplicación se bloqueará (tratando de agregar un objeto nil a la matriz mutable). Esto será mucho más seguro:

#define kNumberOfImages 7 


NSMutableArray *imageView = [[NSMutableArray alloc] init]; 

for(NSUInteger i = 1; i <= kNumberOfImages; i++) { 
    UIImage *anImage = [UIImage imageNamed:[NSString stringWithFormat:@"EyeAnim%d", i]]; 
    if(anImage) { 
     [imageView addObject:anImage]; 
    } 
} 

self.imageDisplay.animationImages = imageView; 
self.imageDisplay.animationDuration = 0.25; 
self.imageDisplay.animationRepeatCount = 50; 
[self.imageDisplay startAnimating]; 
16

soy muy nuevo en Objective-C y he estado recibiendo este error, pero por una razón diferente. Solo quería publicar mi solución para cualquier otra persona que tenga problemas.

Así que, básicamente, tengo una clase personalizada llamada ImagesDetailViewController que hereda de UIViewController y tiene una propiedad de imagen.

@interface ImagesDetailViewController : UIViewController 
@property (strong, nonatomic) UIImage *image; 
@end 

me he conectado mi clase a mi UIImageView en mi guión gráfico como tal

@interface ImagesDetailViewController() 
@property (nonatomic, weak) IBOutlet UIImageView *imageView; 
@end 

En mi método viewDidLoad yo estaba tratando de establecer la imagen de mi punto de vista imagen como esta y conseguir el error mencionado anteriormente (mi variable de imagen se inicializa en un método prepareForSegue)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.imageView setImage:self.image]; 
} 

Así que se quedó perplejo como yo apuesto a que son demasiado. El problema tenía que ver con el guión gráfico. Al hacer clic en mi UIImageView y luego navegar al Inspector de Conexiones, de alguna manera había creado 2 puntos de referencia (¡vaya!) Y uno apuntaba a una variable llamada imagen. Entonces, cuando el programa se estaba ejecutando [self.imageView setImage: self.image] self.image era en realidad una instancia de UIImageView en lugar de UIImage.

+0

¡Eres mi héroe! ¡El inspector de conexión hizo el truco! –

+4

Comportamiento muy horrible de xcode .. si ha creado una toma de corriente y luego cambia el nombre de la variable, la conexión de salida no se actualiza automáticamente. Debes eliminar la conexión y crear una nueva – edrian

Cuestiones relacionadas