我有一个ios12 APP,它从远程api加载图像列表(返回一些简单的JSON),然后在TableViewController包含的图像视图中显示这些图像。第一次进入该屏幕时,一切都很好,但随后的视图缺少这些图像。
我正在使用func viewWillAppear函数加载数据,以确保每次查看屏幕时都会发生这种情况,我正在使用一个调度组将带JSON的下载与dispatchgroup.notify封装在一起,以触发表重新加载这是数据,但无济于事。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
getImagesFromAPI()
dispatchGroup.notify(queue: .main) {
self.tableView.reloadData()
}
}
func getImagesFromAPI() {
dispatchGroup.enter()
if let url = URL(string: baseImageURL + "?eventId=" +
String(globalEventId)) {
URLSession.shared.dataTask(with: url) {
data,response,error in
if let data = data {
if let tmp = String(data: data, encoding: .utf8),
tmp.count > 3 {
let decoder = JSONDecoder()
do {
self.images = try
decoder.decode([EventImage].self, from: tmp.data(using: .utf8)!)
}
catch {
print(error)
}
}
}}.resume()
}
dispatchGroup.leave()
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print("setting up cell \(indexPath.row)")
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",
for: indexPath) as! PhotoTableViewcell
let url = URL(string: baseImageURL + String(eventId) + "/" +
images[indexPath.row].eventImageFilename)
cell.eventImage.sd_setImage(with: url)
return cell
}
我正在使用SDWebImage来获取远程图像,但是问题似乎出在JSON没有加载,所以EventImages数组为空?