2012-03-07 40 views
8

我有這段代碼試圖在一個循環中運行一組簡單的圖像。所有我在應用程序中一個的UIImageView在我的視圖控制器的.h文件中聲明:[UIImageView _isResizable]:無法識別的選擇器發送到實例SIGABRT

@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並創建一個新的UIImageView。

不太確定發生了什麼,任何幫助表示讚賞!

+0

當你說它崩潰時,它崩潰的具體錯誤是什麼? – Will 2012-03-07 23:11:19

回答

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

我是很新的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個引用插座(oops ...),其中一個指向一個名爲image的變量。所以當程序運行時[self.imageView setImage:self.image] self.image實際上是UIImageView的一個實例,而不是UIImage。

+0

你是我的英雄!連接督察做了詭計! – 2014-05-21 20:55:03

+4

xcode非常可怕的行爲..如果您創建了插座然後更改變量名稱,則插座連接不會自動更新。您需要刪除連接並創建一個新連接 – edrian 2015-01-20 19:42:35

相關問題