gpt4 book ai didi

ios - 全局变量在匿名方法中不存储任何数据

转载 作者:行者123 更新时间:2023-11-29 00:58:11 27 4
gpt4 key购买 nike

试图获取 nasa.gov 小行星的数据。有一个小行星实例数组的asteroids全局变量。 jsonData 变量中大约出现了 1000 次。当我在 self.asteroids.append() 行添加该事件时,我可以看到它正在添加。当匿名 completionHandler 方法结束时,变量 self.asteroids 再次为空,因此它不会重新加载任何数据。

这对我来说没有任何意义,因为asteroids是一个全局变量,它应该存储附加到它的任何数据。谁能帮忙?

class ViewController: UITableViewController {

var asteroids = [Asteroid]()

override func viewDidLoad() {
super.viewDidLoad()

let connectionString: String = "https://data.nasa.gov/resource/y77d-th95.json"
let url = NSURL(string: connectionString)!

let session = NSURLSession.sharedSession()

let task = session.dataTaskWithURL(url, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) in
do {
let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())
for index in 0 ... (jsonData.count - 1) {
self.asteroids.append(Asteroid(name: jsonData[index]["name"] as! NSString as String))
}
} catch {
print("Error")
return
}
})

task.resume()

self.tableView.reloadData()
}

最佳答案

在修改小行星数组之后,将 TableView 的 reloadData 方法放在完成 block 中。另一种方法是在 asteroid didSet 方法中重新加载数据:

var asteroids = [Asteroid]() {
didSet {
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
}

完成处理程序的代码在 viewDidLoad 函数的作用域结束后被调用。因为 dataTaskWithURL 是一个异步操作。

关于ios - 全局变量在匿名方法中不存储任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37389041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com