我正在使用一個人臉倍增器應用程序,並試圖確定它爲什麼會崩潰的錯誤;NSRangeException索引超出界限錯誤
[__NSArrayM objectAtIndex:]: index 6 beyond bounds [0 .. 5]'
的方法swapTapped我相信沿線某處導致了問題...
//Create collection
faceViews = [[NSMutableArray alloc] init];
int faceIndex;
- (IBAction)swapTapped:(id)sender {
//Play sound
[[AVAudio sharedAudio] playSound: @"explosion"];
//Show flash
[self.view bringSubviewToFront: self.flashView];
self.flashView.alpha = 1.0;
self.flashView.hidden = FALSE;
[UIView animateWithDuration:0.5 animations:^{
self.flashView.alpha = 0.0;
} completion:^(BOOL finished) {
self.flashView.hidden = TRUE;
}];
//Make all faces the same
faceIndex++;
if (faceIndex >= self.faceViews.count)
{
return;
}
FaceView *faceViewIndex = [self.faceViews objectAtIndex: faceIndex]; // I believe it crashes here
UIImage *baseImage = faceViewIndex.baseImage;
for (FaceView *fv in self.faceViews)
[fv setFaceImage: baseImage];
}
這裏是另一個方法;
-(void) swapFaces {
//Deselect all faces
[self deselectFaces];
//Reset tag flag to zero
for (FaceView *crtFaceView in self.faceViews)
crtFaceView.tag = 0;
//Swap each photo
for (int i=0; i<[self.faceViews count];i++) {
//Get current and next
FaceView *crtFaceView = [self.faceViews objectAtIndex: i];
FaceView *nxtFaceView = crtFaceView == [self.faceViews lastObject] ? [self.faceViews objectAtIndex: 0] : [self.faceViews objectAtIndex: i+1];
//Only not swaped yet
if (crtFaceView.tag == 0 && nxtFaceView.tag == 0) {
//Change flag
crtFaceView.tag = 1;
nxtFaceView.tag = 1;
//Calculate scale
float ratioX = nxtFaceView.bounds.size.width/crtFaceView.bounds.size.width;
float ratioY = nxtFaceView.bounds.size.height/crtFaceView.bounds.size.height;
//Auto saturation matching
crtFaceView.saturation = nxtFaceView.meanSaturation/crtFaceView.meanSaturation;
crtFaceView.brightness = nxtFaceView.meanBrightness/crtFaceView.meanBrightness;
//Auto flip
if (crtFaceView.faceType != nxtFaceView.faceType && crtFaceView.faceType != 0 && nxtFaceView.faceType != 0) {
crtFaceView.flipped = TRUE;
nxtFaceView.flipped = TRUE;
} else {
crtFaceView.flipped = FALSE;
nxtFaceView.flipped = FALSE;
}
//Animate to position
[UIView beginAnimations: @"" context: nil];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut];
//Save original frame and transform
CGPoint tempCenter = crtFaceView.originalCenter;
CGAffineTransform tempTransform = crtFaceView.originalTransform;
//Swap object one
crtFaceView.center = nxtFaceView.originalCenter;
crtFaceView.transform = CGAffineTransformScale(nxtFaceView.originalTransform, ratioX, ratioY);
//Swap object two
nxtFaceView.center = tempCenter;
nxtFaceView.transform = CGAffineTransformScale(tempTransform, 1/ratioX, 1/ratioY);
//Commit animation
[UIView commitAnimations];
}
}
}
的萬無一失的方法來獲得應用崩潰是按swapTapped按鈕3次,它喜歡通過週期,但崩潰了,當它認爲該指數超出界限...?
編輯 - 它在這條線上崩潰;
FaceView *faceViewIndex = [self.faceViews objectAtIndex: faceIndex];
這並沒有阻止錯誤不幸 – Hypergater
哪一行正是導致錯誤? – rmaddy
我已經添加了另一種方法'swapFaces'我認爲Faceview數組導致問題 – Hypergater