J'essaie de trier et de sectionner un UTableView avec une cellule personnalisée par ordre alphabétique. Dans mon ViewController j'ai une fonction qui télécharge les données JSON puis les stocke dans un dictionnaire.Tri de UITableViewData à partir d'AlamoFire avec une fermeture d'échappement
var attendees = [Attendee]()
var sortedFirstLetters: [String] = []
var sections: [[Attendee]] = [[]]
func downloadAttendeeData(completed: @escaping DownloadComplete) {
let headers: HTTPHeaders = [
"Accept": "application/json;odata=verbose",
"User-Agent": "iOS;iOS"
]
NetworkManager.sharedInstance.manager.request(Attendee_URL, method: .get, headers: headers)
.responseJSON { response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject> {
if let list = dict["d"]?["results"] as? [Dictionary<String, AnyObject>] {
for att in list {
let attendee = Attendee(AttendeeDict: att)
self.attendees.append(attendee)
}
self.tableView.reloadData()
}
}
completed()
}
}
Ce morceau de code est exactement ce que je dois
let firstLetters = self.attendees.map { $0.titleFirstLetter }
let uniqueFirstLetters = Array(Set(firstLetters))
self.sortedFirstLetters = uniqueFirstLetters.sorted()
self.sections = self.sortedFirstLetters.map { firstLetter in
return self.names
.filter { $0.titleFirstLetter == firstLetter }
.sorted { $0.titleAD < $1.titleAD }
}
Cependant quand je mets ce code dans viewDidLoad il produit et tableau vide.
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
searchBar.delegate = self
let firstLetters = self.attendees.map { $0.titleFirstLetter }
let uniqueFirstLetters = Array(Set(firstLetters))
self.sortedFirstLetters = uniqueFirstLetters.sorted()
self.sections = self.sortedFirstLetters.map { firstLetter in
return self.names
.filter { $0.titleFirstLetter == firstLetter }
.sorted { $0.titleAD < $1.titleAD }
}
self.downloadAttendeeData {
}
}
Si je mets le code dans la déclaration self.downloadAttendeeData il produit des données, mais il ne crée pas les sections de table.
Comment puis-je produire les sections après le chargement des données dans tableView? Est-ce le problème?
Pouvez-vous mettre le tableau trié dans 'titleForHeaderInSection:' –
Malheureusement, cela produit une table vide. – user1938745
Quelques idées ... # 1 - Est-ce que vous surchargez correctement le nombre de sectionsIntableView? # 2 - Lorsque toutes les données sont censées être téléchargées et sectionnées, imprimez le contenu des structures de données pour vous assurer qu'elles sont bien construites. # 3- Lorsque toutes les données sont supposées être téléchargées et sectionnées, appelez tableView.reloadData() . Pour vous assurer que ce n'est pas une sorte de problème de synchronisation # 4- Assurez-vous que vous appelez tableView.reloadData() du fil conducteur: dispatch_async (dispatch_get_main_queue()) { self.tableView.reloadData() } –