2017-03-09 1 views
-2

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]; 
+0

, die nicht den Fehler zu stoppen hat leider – Hypergater

+0

Welche Zeile verursacht genau den Fehler? – rmaddy

+0

Ich habe eine andere Methode 'swapFaces' hinzugefügt. Ich denke, das Faceview-Array verursacht das Problem – Hypergater

Antwort

-1

// Ich weiß nicht genau, wo Sie erhöhen

faceIndex++; 

    if (faceIndex < self.faceViews.count) 
    { 
    FaceView *faceViewIndex = [self.faceViews objectAtIndex: faceIndex]; 

     UIImage *baseImage = faceViewIndex.baseImage; 
     for (FaceView *fv in self.faceViews) 
      [fv setFaceImage: baseImage]; 

    } 
+0

Dies stoppt den Absturz am 3. Tippen Sie auf mein Beispielfoto hat 4 Personen, und mit dieser Methode kann ich die Gesichter von jedem radeln, aber sobald ich klicke vorbei, Wenn ich versuche, die App fortzusetzen stürzt ab, also muss ich herausfinden, wie ich es einschränken kann, um nur auf die Anzahl der Personen auf dem Bildschirm klicken zu können. – Hypergater

0

Im Fall möchten Sie diesen Absturz zu überwinden, fügen

if(faceIndex < [self.faceViews count] && [self.faceViews count] > 0) { 
    FaceView *faceViewIndex = [self.faceViews objectAtIndex: faceIndex]; 
    } 
+0

Also sollte die neue Methode so aussehen? '// Neue Methode faceIndex ++; if (faceIndex <[self.faceViews zählen]) { FaceView * faceViewIndex = [self.faceViews objectAtIndex: faceindex]; } FaceView * facebookIndex = [self.faceViews objectAtIndex: faceindex]; UIImage * baseImage = faceViewIndex.baseImage; für (FaceView * fv in self.faceViews) [fv setFaceImage: baseImage]; } // Ende neue Methode' – Hypergater

+0

ja @Hypergater! fragen/antworten Sie mir, wenn nötig, andere Hilfe? –

+0

Hi, hmm es stürzt immer noch ab ... – Hypergater

Verwandte Themen