[UIImageView _isResizable]: нераспознанный селектор, отправленный экземпляру SIGABRT - PullRequest
8 голосов
/ 08 марта 2012

У меня есть этот код, пытающийся запустить простой набор изображений в цикле. Все, что у меня есть в приложении, это один UIImageView, объявленный в файле .h моего View Controller:

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

И следующее в методе viewDidLoad моего .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];

Кажется, что код сбой в строке "imageDisplay.animationImages", как будто я создаю UIImageView, создаю его getter и setter, и строю, все нормально, пока я не раскомментирую эту строку. Если я его раскомментирую, он будет выдавать ошибку до тех пор, пока я не удалю UIImageView и не создам новый.

Не слишком уверен, что происходит, любая помощь приветствуется!

Ответы [ 2 ]

17 голосов
/ 08 июня 2013

Я очень плохо знаком с целью-c, и я тоже получаю эту ошибку, но по другой причине. Я просто хотел опубликовать свое решение для всех, кто может бороться.

Так что в основном у меня есть собственный класс ImagesDetailViewController, который наследуется от UIViewController и имеет свойство image.

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

Затем я подключил свой класс к своему UIImageView на моей раскадровке так:

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

В моем методе viewDidLoad я пытался установить изображение для моего изображения таким образом и получал ошибку, упомянутую выше (моя переменная изображения инициализируется в методе prepareForSegue)

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

Так что я был в замешательстве, держу пари, что вы тоже все. Проблема была связана с раскадровкой. Нажав на мой UIImageView и затем перейдя к инспектору подключений, я каким-то образом создал 2 выходных канала (к сожалению ...), и один указывал на переменную с именем image. Поэтому, когда программа работала [self.imageView setImage: self.image] self.image был фактически экземпляром UIImageView вместо UIImage.

13 голосов
/ 08 марта 2012

animationImages массив ДОЛЖЕН содержать только объекты UIImage. Ваш массив содержит объекты UIImageView.

Также ваш код небезопасен - если один из ресурсов не будет существовать, приложение потерпит крах (попытка добавить объект nil в изменяемый массив). Это будет намного безопаснее:

#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];
...