2016-09-15 3 views
1

Ich habe eine Reihe von Räumen, die ich nach usercount/topvotes sorta Zeug filtern möchte.Sortieren von Arrays verursacht falsche Daten in Zellen angezeigt werden

Ich treffe auf Schaltflächen, um die Filteränderungen auszulösen, setze einen Wert auf "CurrentSearch", lade meine Tabeldaten neu und in meinem cellForRowAtIndexPath prüfe ich den aktuellen currentsearch Wert und filtere die Liste entsprechend.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


     if currentSearch == "new" { 
     self.PersonalSearchesList = PersonalSearchesList.sorted{ $0.users < $1.users } 

     } else if currentSearch == "top" { 

      self.PersonalSearchesList = self.PersonalSearchesList.sorted{ $0.latestUser < $1.latestUser } 

     } 

Meine Bilder/Labels laden vor der Filterung einwandfrei. Beim ersten Laden setze ich currentSearch auf "neu" und es funktioniert einwandfrei. Erst wenn ich versuche, zwischen Filtern zu wechseln, werden die Dinge funky. Ich erhalte zufällige Duplikate von Zellen, und während ich zwischen den Filtern wechsle, bleiben die inkorrekten Ladungen konsistent..wie in den gleichen Duplikaten der gleichen Zellen an den gleichen Stellen gemacht/platziert werden.

Ich habe es, wenn ich auf eine Zelle klicke, werden die Informationen für die Zelle gedruckt..und trotz der falsch geladenen Zelleninformation sind die tatsächlichen Informationen korrekt und die Listen sind so geordnet, wie sie sein sollten.

irgendwelche Ideen?

+4

Nie jemals versuchen, die Datenquelle auf 'cellForRowAtIndexPath' zu ändern, dass das Produkt sehr schlechtes Verhalten und wirklich falsch, Sie haben es zu sortieren, bevor Sie Ihr Tableview nachladen – Tj3n

+0

Ich wurde dorthin verschoben, wo ich nach dem Tippen tippe und dann die Tabellenansicht neu laden, und das hat perfekt funktioniert. Ich habe gesehen, dass das Sortieren in einem Video wie dieses einmal gemacht wurde und es blieb bei mir als der Weg, es zu tun. Schätze nicht haha. Apprecaite es Mann. – user6820041

Antwort

1

Sie sollten etwas tun:

var currentSearch: String { 
    didSet { 
    // sort your array 
    tableView?.reloadData() // reload data 
    } 
} 
+0

Ja perfekt. Genau das habe ich gebraucht! Wo kann ich bei der ersten Ladung sortieren? Ich ziehe meine Daten aus firebase, also kann ich in viewdidload nicht nur currentSearch = auf etwas setzen, weil das Array nicht unbedingt geladen wird? Wenn ich mich an das Array anschließe, führe ich die Sortierung dort aus, so dass jedes Mal, wenn ein Element hinzugefügt wird, es sortiert wird, oder wird das auch funky sein? – user6820041

0

Wenn Sie Ihre alle dann sortieren werden jedes Mal sortiert, wenn Sie Ihre tableview scrollen oder neu laden. Sortieren Sie Ihre Daten also woanders in einer anderen Methode und laden Sie nach der erfolgreichen Sortierung Ihr tableview neu.

Verwandte Themen