我正在使用一个人脸倍增器应用程序,并试图确定它为什么会崩溃的错误;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