[英]Sorting UITableViewData from AlamoFire with an escaping closure
I'm trying to sort and section a UTableView with a Custom Cell Alphabetically.我正在尝试按字母顺序对带有自定义单元格的 UTableView 进行排序和分区。 In my ViewController I have a function that downloads the JSON data then stores it in a Dictionary.
在我的 ViewController 中,我有一个函数可以下载 JSON 数据,然后将其存储在字典中。
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()
}
}
This piece of code is exactly what I need这段代码正是我需要的
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 }
}
However when I put this code in viewDidLoad it produces and Empty Array.但是,当我将此代码放入 viewDidLoad 时,它会生成空数组。
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 {
}
}
If I put the code inside the self.downloadAttendeeData declaration it produces data but it doesn't create the table sections.如果我将代码放在 self.downloadAttendeeData 声明中,它会生成数据,但不会创建表部分。
How can I produce the sections after the data is loaded into the tableView?将数据加载到 tableView 后如何生成部分? Is that the problem?
这是问题吗?
Make sure that you call tableView.reloadData()
from the main thread like this:确保您像这样从主线程调用
tableView.reloadData()
:
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
or in Swift 3 and later:或在 Swift 3 及更高版本中:
DispatchQueue.main.async {
self.tableView.reloadData()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.