Ich benutze eine Gesicht Multiplikator-App und versuchen zu ermitteln, warum es mit dem Fehler abstürzt;NSRangeException Index über Grenzen Fehler
[__NSArrayM objectAtIndex:]: index 6 beyond bounds [0 .. 5]'
Verfahren swapTapped Ich glaube, das Problem irgendwo entlang der Strecke verursacht ...
//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];
}
hier ein anderes Verfahren ist;
-(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];
}
}
}
Ein garantierter Weg, um die App zu Absturz zu bekommen, ist die swapTapped Taste 3-mal zu drücken, es ist wie es durchläuft, sondern stürzt, wenn es der Index über Grenzen denkt ...?
Bearbeiten- Es stürzt auf dieser Linie ab;
FaceView *faceViewIndex = [self.faceViews objectAtIndex: faceIndex];
, die nicht den Fehler zu stoppen hat leider – Hypergater
Welche Zeile verursacht genau den Fehler? – rmaddy
Ich habe eine andere Methode 'swapFaces' hinzugefügt. Ich denke, das Faceview-Array verursacht das Problem – Hypergater