2016-09-14 3 views
-2

Ich habe eine Reihe von Freunden, Arrays ihrer verwandten Informationen. Ich rende Zellen in einer Tabellenansicht, und das funktioniert großartig. Ich kann die App zum Absturz bringen, wenn ich mit vielen Klicks auf dem Bildschirm nach oben/unten scrolle ... und ich kann nicht für das Leben von mir verstehen, warum!Swift - Index außerhalb des Bereichs in UITableVewController

Dies ist der Fehler: fatale Fehler: Index außerhalb des zulässigen Bereichs

Es nicht so sein Sinn und Verstand scheint, warum dies geschieht, und es ist wirklich verwirrend. Einblick würde geschätzt werden.

Dies ist die andernfalls Klasse:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! PictureCell 
    let pos = self.positiveVoteArray.reduce(0,combine: {$0 + $1}) 
    let neg = self.negativeVoteArray.reduce(0,combine: {$0 + $1}) 
    let progress = (pos + neg)/pos 

//Fails below this line, first reference to indexPath.row // 
    cell.usernameBtn.setTitle(usernameArray[indexPath.row], forState: .Normal) 
    cell.uuidLbl.text = uuidArray[indexPath.row] 

    avaArray[indexPath.row].getDataInBackgroundWithBlock { (data:NSData?, error:NSError?) in 
     if error == nil { 
      cell.avaImg.image = UIImage(data: data!) 
     } 
    } 

    if votedFriendsArray.contains((PFUser.currentUser()?.username!)!) { 
     cell.scoreBar.hidden = false; 
     cell.dislikeBtn.hidden = true; 
     cell.likeBtn.hidden = true; 
     cell.scoreBar.setProgress(progress, animated: true) 

    } else { 
     cell.scoreBar.hidden = true; 
     cell.dislikeBtn.hidden = false; 
     cell.likeBtn.hidden = false; 
    } 

    picArray[indexPath.row].getDataInBackgroundWithBlock { (data:NSData?, error:NSError?) in 
     if error == nil { 
      cell.picImg.image = UIImage(data: data!) 
     } 
    } 

    // assign index 
    cell.usernameBtn.layer.setValue(indexPath, forKey: "index") 

    return cell 
} 
+2

Auf welcher Zeile erhalten Sie den Fehler? –

+0

@SamM der Fehler ist unter dem Kommentar, Zeile 8 – matt

Antwort

0

Sie sind am ehesten die falsche Anzahl von Zeilen in der tableView(UITableView, numberOfRowsInSection: Int) Einstellung. Es muss auf usernameArray.count eingestellt werden und Sie müssen sicherstellen, dass es aktuell bleibt (wenn Sie Elemente entfernen). Und wenn man die nächste Zeile betrachtet, muss die Zählung von uuidArray dieselbe sein wie usernameArray.

+0

, so benutze ich benutzernameArray.count .. aber vielleicht sollte ich UuidArray.count verwenden. Was ich mache ist, wenn ich auf eine Zelle klicke, navigiere ich zu einer neuen Ansicht und drücke uuidArray [indexPath.row], und wenn ich nav zurück gehe, mache ich das. Das funktioniert normalerweise sehr gut, aber wenn ich auf einen Haufen tippe/scrolle, bekomme ich den Fehler. Warum würde das ** manchmal ** einen Fehler verursachen? – matt

+0

Überprüfen Sie die Anzahl von 'uuidArray'- es muss mindestens so viele Elemente wie' usernameArray' haben. – MirekE

Verwandte Themen