2012-11-22 48 views
-2

經與下面的代碼位的麻煩:終止應用程序由於未捕獲的異常 'NSRangeException',原因: '*** - [__ NSArrayI objectAtIndex:]:索引7超出範圍[0 .. 6]'

int count = [imageArray count]; 
for (int i = 0; i <= count ; i++) 
{ 
    UIImage *currentImage = [imageArray objectAtIndex: i]; 
    UIImage *nextImage = [imageArray objectAtIndex: i +1]; 
    self.imageview.image = [imageArray objectAtIndex: i]; 
[self.view addSubview:self.imageview]; 
CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"]; 
crossFade.duration = 5.0; 
crossFade.fromValue = (__bridge id)(currentImage.CGImage); 
crossFade.toValue = (__bridge id)(nextImage.CGImage); 
[self.imageview.layer addAnimation:crossFade forKey:@"animateContents"]; 
    self.imageview.image = nextImage; 

}; 

非常新的iOS編碼,所以任何幫助將不勝感激,只需要知道如何停止錯誤。

+2

您是否嘗試閱讀郵件? –

+0

無需嚴重降低OP。是的,答案很明顯。是的,他可以自己找到答案,但仍然... @Steffan:歡迎來到SO。下一次請閱讀調試器發送給你的消息:)並且不要忘記接受幫助你解決問題的答案。您還應該花時間閱讀[常見問題](http://stackoverflow.com/faq) –

+1

我確實閱讀了該消息,但顯然不知道如何解決問題,因此提出了問題。 –

回答

0

問題是由於這段代碼:

UIImage *nextImage = [imageArray objectAtIndex: i +1]; 

,你所使用的條件:i <= count

假設你的數組包含6個對象。然後循環將從0 - 6運行。數組索引從0開始,因此第6個元素索引爲5.如果嘗試讀取objectAtIndex:6,則會發生崩潰。

就像明智的你是在i + 1拍攝圖像,如果我是5,那麼它會嘗試取i + 1表示第6個元素。可能是碰撞。

改變你的方法,如:

int count = [imageArray count]; 
for (int i = 0; i <count-1 ; i++) 
{ 
    UIImage *currentImage = [imageArray objectAtIndex: i]; 
    UIImage *nextImage = [imageArray objectAtIndex: i +1]; 
    self.imageview.image = [imageArray objectAtIndex: i]; 
    [self.view addSubview:self.imageview]; 
    CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"]; 
    crossFade.duration = 5.0; 
    crossFade.fromValue = (__bridge id)(currentImage.CGImage); 
    crossFade.toValue = (__bridge id)(nextImage.CGImage); 
    [self.imageview.layer addAnimation:crossFade forKey:@"animateContents"]; 
    self.imageview.image = nextImage; 

}; 
+0

是的,這是擺脫了錯誤,謝謝。 任何想法爲什麼只有最後2張圖片出現時,當我運行它雖然?數組中有7個 –

+0

@SteffanDavies:這是由於循環,循環會突然執行。 o你只能看到最後兩張圖片。 –

+0

我會如何制止這種情況?對於noob問題感到抱歉哈哈我仍然在學校,並且只在一週前開始學習Objective C,除此之外我知道的只是一點VB –

2

你有兩個問題。你的數組裏有7個對象。這意味着有效的指標是0到6

for循環寫入到7 0迭代所以你應該把它寫:

for (int i = 0; i < count; i++) 

你有i <= count,而不是i < count

但還有另一個問題。在循環內部,您將獲得索引i處的當前圖像和索引i + 1處的下一個圖像。所以這意味着當你得到索引6處的當前圖像時,下一個圖像將從索引7中檢索出來。這將使它再次崩潰。

很可能你想要更快地停止循環。應該是:

for (int = 0; i < count - 1; i++) 
相關問題