-2

次のコードに問題があります。

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コーディングは非常に新しいので、助けていただければ幸いです。エラーを止める方法を知っておく必要があります。

4

2 に答える 2

2

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++)
于 2012-11-22T17:36:05.723 に答える
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;

};
于 2012-11-22T17:33:51.487 に答える