Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JSON数据下载到TableView中?_Json_Swift_Uitableview - Fatal编程技术网

如何将JSON数据下载到TableView中?

如何将JSON数据下载到TableView中?,json,swift,uitableview,Json,Swift,Uitableview,我想显示数据,但运行时无法显示任何内容 import UIKit class AnimalTableViewController: UITableViewController { final let urlString = "https://doc-00-4k-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/ncme2210ej4sg6n7p7ipm3bmm6mht9s8/1568275200

我想显示数据,但运行时无法显示任何内容

 import UIKit

class AnimalTableViewController: UITableViewController {
final let urlString = "https://doc-00-4k-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/ncme2210ej4sg6n7p7ipm3bmm6mht9s8/1568275200000/00096549938281215637/*/1aE90llwaDYEGS9Ci3nSmBUfaD75Rf6PD?e=download"


var nameArray = [String]()
var catArray = [String]()
var imgURLArray = [String]()


override func viewWillAppear(_ animated: Bool) {
    downloadJsonWithURL()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return nameArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "AnimalsCell") as! TableViewCell
    cell.nameLabel.text = nameArray[indexPath.row]
    cell.catLabel.text = catArray[indexPath.row]

    let imgURL = NSURL(string: imgURLArray[indexPath.row])

    if imgURL != nil {
        let data = NSData(contentsOf: (imgURL as URL?)!)
        cell.imgView.image = UIImage(data: data! as Data)

    }

    return cell
}

func downloadJsonWithURL() {
    let url = NSURL(string: urlString)
    URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in

        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
            print(jsonObj.value(forKey: "animals")!)

            if let actorArray = jsonObj.value(forKey: "animals") as? NSArray {
                for actor in actorArray{
                    if let actorDict = actor as? NSDictionary {
                        if let name = actorDict.value(forKey: "name") {
                            self.nameArray.append(name as! String)
                        }
                        if let name = actorDict.value(forKey: "category") {
                            self.catArray.append(name as! String)
                        }
                        if let name = actorDict.value(forKey: "image") {
                            self.imgURLArray.append(name as! String)
                        }

                    }
                }
            }

            OperationQueue.main.addOperation({
                self.tableView.reloadData()
            })
        }
    }).resume()
}

}使用Dispatchqueue而不是OperationQueue

DispatchQueue.main.async {
并创建一个包含结构的数组,而不是使用3个单独的数组

struct Animal {
    let name: String
    let category: String
    let image: String
}
不要使用NS类

//...
if let animals = jsonObj.value(forKey: "animals") as? [Any] {
    for actor in animals {
        if let actorDict = actor as? [String: Any] {
            animal = Animal()
            if let name = actorDict["name"] as? String {
                animal.name = name
            }
            if let category = actorDict["category"] as? String {
                animal.category = category               
            }
            if let imageUrl = actorDict["image"] as? String {
                animal.imageUrl = imageUrl
            }
            self.animalArray.append(animal)
        }
    }
}

DispatchQueue.main.async {
    self.tableView.reloadData()
})
self.animalArray在哪里

var animalArray: [Animal]

我不能使用你的slution,如果你有空,可以帮我解决吗?问题是什么?可以添加skype bro吗?否。请在此处描述你的问题。我没有问题,应用程序仍在运行,但数据未显示在tableview中: