gpt4 book ai didi

json - JSON 调用后保存数据遇到困难

转载 作者:行者123 更新时间:2023-11-30 10:44:54 24 4
gpt4 key购买 nike

我正在尝试将 JSON 调用中的数据保存到变量中(如果有影响,请在 ViewDidLoad 中调用它)。我已经被困在这个问题上很长一段时间了,并且感到非常沮丧。

我知道已经有关于此的主题,但我似乎无法弄清楚,我希望对我做错的事情有一个简单的解释。

编辑:在执行 JSON 调用之前,执行会转到“print("breakpoint")”行,我想强制执行等待,这样我实际上可以填充 WantCARDSET,但我正在努力解决如何做到这一点。如果不清楚,抱歉!

这是viewDidLoad中的调用

override func viewDidLoad() {
super.viewDidLoad()
setPickerView.dataSource = self
setPickerView.delegate = self

testJSONgrab.getCards(url: "https://mtgjson.com/json/WAR.json") {json, error in

DispatchQueue.main.async {
for item in json {
self.wantedCARDSET.append(item)
}
}
}

print("breakpoint")

getCards函数

class mtgJSONDATA {
func getCards(url: String, completionHandler: @escaping ([CARDS], Error?)-> Void) {

var cardSet = [CARDS]()
guard let url = URL(string:url) else {return}
let session = URLSession.shared
let task = session.dataTask(with: url, completionHandler: {
(data, response, error) in
if error == nil {
guard let data = data else {return}
do {
let decoded = try JSONDecoder().decode(mtgJSON.self, from: data)
DispatchQueue.main.async {
for item in decoded.cards! {
cardSet.append(item)
}
completionHandler(cardSet, nil)
}
} catch let jsonError {
print("Error serializing JSON: ", jsonError)
}
}
})
task.resume()
}

最佳答案

您错过了重新加载

DispatchQueue.main.async { 
self.wantedCARDSET = item
self.setPickerView.reloadAllComponents()
}

由于获取数据的调用是异步的

关于json - JSON 调用后保存数据遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55943856/

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