由于未捕获的异常'NSRangeException'终止应用程序,原因:'*** - [__ NSArrayI objectAtIndex:]:索引7超出边界[0 .. 6]'

时间:2012-11-22 17:30:38

标签: ios xcode runtime-error

遇到以下代码问题:

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 :(得分:2)

你有两个问题。你的数组中有7个对象。这意味着有效索引为0到6。

你的for循环被编写为从0到7迭代。所以你应该把它写成:

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

您有i <= count而不是i < count

但还有另一个问题。在循环内部,您将获得索引i处的当前图像以及索引i + 1处的下一图像。所以这意味着当您在索引6处获取当前图像时,将从索引7中检索下一个图像。这将使其再次崩溃。

很可能你想更早地停止循环。它应该是:

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

答案 1 :(得分:0)

问题在于这段代码:

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

以及您使用的条件:i <= count

假设您的数组包含6个对象。然后循环将从0到6运行。数组索引从0开始,因此第6个元素索引是5.如果您尝试获取objectAtIndex:6将发生崩溃。

同样明智的是,如果i为5,你在i + 1拍摄图像,那么它将尝试取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;

};
相关问题