无法从远程api获取json并无法可靠地从Web加载图像

时间:2019-09-20 15:44:09

标签: ios swift

我有一个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数组为空?

0 个答案:

没有答案