gpt4 book ai didi

ios - 将 JSON 数据导出到文本字段时出现问题

转载 作者:行者123 更新时间:2023-11-29 05:46:52 25 4
gpt4 key购买 nike

我正在使用 JSONDecoder 协议(protocol)从数据库获取一些数据。

以下代码的所有内容均按预期工作,但我无法将 car.driver_name 导出到名为 contacttextField 的文本字段

我尝试设置 self.contacttextField = car.driver_name 但结果不佳。由于某种原因,解码后的 JSON 中的文本大约需要一分钟才能显示出来,调试器会显示:

10  Foundation                          0x00000001d67a8908 <redacted> + 740
11 Foundation 0x00000001d689ecec <redacted> + 272
12 libdispatch.dylib 0x0000000102a436f0 _dispatch_call_block_and_release + 24
13 libdispatch.dylib 0x0000000102a44c74 _dispatch_client_callout + 16
14 libdispatch.dylib 0x0000000102a47ffc _dispatch_continuation_pop + 524
15 libdispatch.dylib 0x0000000102a47458 _dispatch_async_redirect_invoke + 628
16 libdispatch.dylib 0x0000000102a55dc8 _dispatch_root_queue_drain + 372
17 libdispatch.dylib 0x0000000102a567ac _dispatch_worker_thread2 + 156
18 libsystem_pthread.dylib 0x00000001d5a591b4 _pthread_wqthread + 464
19 libsystem_pthread.dylib 0x00000001d5a5bcd4 start_wqthread + 4

以下是我正在使用的代码:

struct FacilityInfo: Decodable {
let driver_name: String
}

class infoViewController: UIViewController {
@IBOutlet weak var usernameTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()

let url = URL(string: "https://example.com/example/test.php")!

let task = URLSession.shared.dataTask(with: url) { data, response, error in
// ensure there is no error for this HTTP response
guard error == nil else {
print ("error: \(error!)")
return
}

// ensure there is data returned from this HTTP response
guard let data = data else {
print("No data")
return
}

// Parse JSON into array of Car struct using JSONDecoder

guard let cars = try? JSONDecoder().decode([FacilityInfo].self, from: data) else {
print("Error: Couldn't decode data into cars array")
return
}

for car in cars {
print("car name is \(car.driver_name)")
self.usernameTextField.text = cars.driver_name
}
}

task.resume()

最佳答案

URLSession.dataTask 在后台线程上执行其闭包,但所有 UI 更新都需要从主线程进行。因此,您需要在主线程上执行对 usernameTextField.text 的调用。

...
guard let cars = try? JSONDecoder().decode([FacilityInfo].self, from: data), let firstCar = cars.first else {
print("Error: Couldn't decode data into cars array")
return
}
DispatchQueue.main.async {
self.usernameTextField.text = firstCar.driver_name
}

另请记住,cars 是一个数组,因此您应该访问其元素之一,该元素具有 driver_name 属性,并将其分配给文本字段的 文本 属性。例如,我已分配第一个元素的值,但可以更改该值以满足您的要求。

您还应该遵守 Swift 命名约定,即变量名称采用小驼峰命名法 (driverName)。

关于ios - 将 JSON 数据导出到文本字段时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067577/

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