gpt4 book ai didi

ios - UILabel 没有在 ViewController swift3 中更新

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

我正在解析来自 json 的数据并将它们放入变量然后使用这些变量来更改 UILabel 的值但是它们(UILabel)没有得到更新,我已经通过互联网搜索并且他们说这是结果从主线程以外的线程更新 UIlabel 但在这里我把它放在 viewController 中但仍然没有更新这是我的代码:

import UIKit

class NewsContentViewController: UIViewController {


@IBOutlet weak var nuTitle: UILabel!
var namesArray = String()
var iD = String()
var description1 = String()
var iDArray = [String]()


@IBOutlet weak var tctView: UITextView!


override func viewDidLoad() {
super.viewDidLoad()

parseJSON()



nuTitle.text = self.namesArray
tctView.text = self.description1

// Do any additional setup after loading the view.
}




func parseJSON(){



let requestURL: NSURL = NSURL(string: "XXXXXX" + iD)!
print(requestURL)
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest as URLRequest) {
(data, response, error) -> Void in


let readableJSON = JSON(data: data! , options: JSONSerialization.ReadingOptions.mutableContainers, error: nil)





if let Name = readableJSON[0]["Title"].string as String! {
var ID = readableJSON[0]["Id"].intValue
var iDString = String (ID)
self.namesArray.append(Name)

var desc = readableJSON[0]["Description"].string as String!
var type = readableJSON[0]["Type_Name"].string

self.iDArray.append(iDString)

self.description1 = desc!
self.namesArray = Name


}
}
task.resume()


}


}

最佳答案

问题

这里的问题是parseJSON()里面的任务会异步执行。到那时

nuTitle.text = self.namesArray
tctView.text = self.description1

即将执行,任务尚未返回结果。

请阅读有关 iOS 中线程的更多信息 here

解决方案

对于这种情况,一个合适的解决方案是添加一个 completionBlock,它将返回您的数据。

override func viewDidLoad() {
super.viewDidLoad()

parseJSON { (description, name) in
DispatchQueue.main.async {
self.description1 = description
self.namesArray = name
nuTitle.text = self.namesArray
tctView.text = self.description1
}
}
}

func parseJSON(completion: @escaping (_ description: String, _ name: String) -> Void) {
let requestURL: NSURL = NSURL(string: "XXXXXX" + iD)!
print(requestURL)
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest as URLRequest) {
(data, response, error) -> Void in


let readableJSON = JSON(data: data! , options: JSONSerialization.ReadingOptions.mutableContainers, error: nil)

if let Name = readableJSON[0]["Title"].string as String! {
var ID = readableJSON[0]["Id"].intValue
var iDString = String (ID)
self.namesArray.append(Name)

var desc = readableJSON[0]["Description"].string as String!
var type = readableJSON[0]["Type_Name"].string

self.iDArray.append(iDString)

completion(desc!, Name)
}
}
task.resume()
}

关于ios - UILabel 没有在 ViewController swift3 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40422476/

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