【问题标题】:[UIImageView _isResizable]: unrecognized selector sent to instance SIGABRT[UIImageView _isResizable]:发送到实例 SIGABRT 的无法识别的选择器
【发布时间】:2012-03-25 12:07:24
【问题描述】:

我有这段代码试图在一个循环中运行一组简单的图像。我在应用程序中只有一个 UIImageView 在我的视图控制器的 .h 文件中声明:

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

在我的 .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];

代码似乎在“imageDisplay.animationImages”行上崩溃了,就好像我创建了 UIImageView,创建了它的 getter 和 setter,然后构建,在我取消注释该行之前它很好。如果我取消注释它,它会一直给我错误,直到我删除 UIImageView 并创建一个新的。

不太清楚发生了什么,感谢任何帮助!

【问题讨论】:

  • 当你说它崩溃时,它崩溃的具体错误是什么?

标签: ios uiimageview nsmutablearray sigabrt


【解决方案1】:

我对 Objective-c 很陌生,我也遇到过这个错误,但原因不同。我只是想将我的解决方案发布给其他可能遇到困难的人。

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

@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,然后导航到 Connections Inspector,我以某种方式创建了 2 个引用出口(哎呀......),其中一个指向一个名为 image 的变量。所以当程序运行时 [self.imageView setImage:self.image] self.image 实际上是 UIImageView 的一个实例,而不是 UIImage。

【讨论】:

  • xcode 的行为非常糟糕。如果您创建了一个插座,然后您更改了变量名称,插座连接不会自动更新。您需要删除连接并创建一个新的
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多