[UIImageView _isResizable]:无法识别的选择器发送到实例SIGABRT

Luk*_*uke 8 uiimageview nsmutablearray sigabrt ios

我有这个代码试图在一个循环中运行一组简单的图像.我在应用程序中的所有内容都是在我的View Controller的.h文件中声明的一个UIImageView:

@property (strong, nonatomic) IBOutlet UIImageView *imageDisplay;
Run Code Online (Sandbox Code Playgroud)

以下是我的.m文件的viewDidLoad方法:

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];
Run Code Online (Sandbox Code Playgroud)

代码似乎在"imageDisplay.animationImages"行上崩溃,就像我创建UIImageView,创建它的getter和setter,以及构建一样,直到我取消注释该行为止.如果我取消注释它,它会一直给我错误,直到我删除UIImageView并创建一个新的.

不太确定发生了什么,任何帮助表示赞赏!

小智 17

我对objective-c很新,我也遇到了这个错误,但原因不同.我只是想为其他可能正在努力的人发布我的解决方案.

所以基本上我有一个名为ImagesDetailViewController的自定义类,它继承自UIViewController并具有image属性.

@interface ImagesDetailViewController : UIViewController
@property (strong, nonatomic) UIImage *image;
@end
Run Code Online (Sandbox Code Playgroud)

然后我将我的课程连接到我的故事板上的UIImageView

@interface ImagesDetailViewController ()
@property (nonatomic, weak) IBOutlet UIImageView *imageView;
@end
Run Code Online (Sandbox Code Playgroud)

在我的viewDidLoad方法中,我试图像这样为我的图像视图设置图像并获得上面提到的错误(我的图像变量在prepareForSegue方法中初始化)

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.imageView setImage:self.image];
}
Run Code Online (Sandbox Code Playgroud)

所以我很难过,因为我打赌你也是.问题与故事板有关.单击我的UIImageView,然后导航到Connections Inspector,我以某种方式创建了2个引用插座(oops ...),其中一个指向了一个名为image的变量.所以当程序运行时[self.imageView setImage:self.image] self.image实际上是UIImageView的一个实例,而不是UIImage.

  • 非常糟糕的xcode行为..如果您创建了一个插座然后更改了变量名称,则插座连接不会自动更新.您需要删除该连接并创建一个新连接 (4认同)

Art*_*ski 13

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];
Run Code Online (Sandbox Code Playgroud)