2016-03-28 6 views
1

Ich habe etwas Code, der eine Punktzahl erhöht, wenn Sie auf das entsprechende UICollectionViewCell klicken. Der Code lautet wie folgt:reloadItemsAtIndexPath schneller Fehler?

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
     teamScores[indexPath.row] += 1 
     collectionView.reloadItemsAtIndexPaths([indexPath]) 
} 

Dies funktioniert anfangs gut, aber wenn ich zum Startbildschirm zurückkehren und wieder in die App zurück, wird die App zu frieren, wenn ich versuche, wieder auf die Zelle zu klicken. Bei näherer Betrachtung scheint es, als befände es sich in einer Art Schleife, wobei die CPU bei 100% läuft und der Speicherbedarf jede Sekunde zunimmt.

Beachten Sie, dass, wenn ich nicht auf eine Zelle klicke ich eine andere Aktion, gibt es keine Probleme, soweit ich das beurteilen kann. Die Ausnahme ist eine Reset-Taste, die den Code ausgeführt wird:

@IBAction func resetScores(sender: AnyObject) { 
     resetScores() 
     collectionView.reloadSections(NSIndexSet(index: 0)) 
} 

Das ‚Crash‘ geschieht nur mit der App wieder aktiviert wird - es geschieht nicht, wenn Sie auf eine andere Registerkarte wechseln und kommen wieder zurück.

Wenn ich den reloadItemsAtIndexPaths(...) Code durch reloadData() ersetzen, verschwindet das Problem. Ist das ein Fehler, oder fehlt mir etwas?

Vielen Dank im Voraus!

Antwort

0

Sie könnten versuchen, die Zelle abzuwählen, nachdem Sie sie ausgewählt haben, weil sie in einem ausgewählten Zustand bleibt.

Versuchen Sie:

collectionView.deselectItemAtIndexPath(indexPath, animated : false) 

nach dem:

teamScores[indexPath.row] += 1 

Und sehen, ob das Ihr Problem löst.

--EDIT--

override func viewWillAppear() { 
    super.viewWillAppear() 
    collectionView.reloadData() 
} 
+0

Das ist nicht leider nicht funktioniert :( – Ben

+0

können Sie diese Methode zur Klasse hinzufügen (Bearbeiten von Original-Beitrag sehen) – Emptyless

+0

Kein Glück mit, dass entweder! – Ben