gpt4 book ai didi

json - 解析 JSON 卡住 tableView SWIFT

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

我当前的问题是,当调用函数 updateLabels 时,我的 tableView 卡住了。我的目标是每 15 秒更新一次广播电台的歌曲名称和标题。我有一个 dict 数组,其中保存信息和每 15 秒填充该 dict 数组的函数。每个站点都有一个单独的 JSON 链接文件,我将其放入 getData 函数参数中。我该怎么做才能让它变得更好并阻止 tableView 卡住?

主数组

var songNames = [
(songArtist: "", songName: ""),
(songArtist: "", songName: ""),
.....
]

更新歌曲标题和名称

func updateLabels() {
songNames.removeAll()
songNames.append((songArtist: getData("rd").artistName, songName: " - \(getData("record").songName)"))
songNames.append((songArtist: getData("mix").artistName, songName: " - \(getData("mix").songName)"))
tableView.reloadData()
}

从 JSON 链接获取数据

func getData(urlPart: String) ->(artistName: String, songName: String) {
let mainURl = "http://...json"
let url = NSURL(string: mainURl)
let jsonData = NSData(contentsOfURL: url!) as NSData!
let readableJSON = JSON(data: jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil)
let songArtistName = readableJSON["ARTIST"]
let songName = readableJSON["NAME"]
return (songArtistName.description, songName.description)
}

在我的viewDidLoad

override func viewDidLoad() {
super.viewDidLoad()
updateLabels()
//**Timer to call the function every 15 sec**
NSTimer.scheduledTimerWithTimeInterval(15, target: self, selector: #selector(self.updateLabels), userInfo: nil, repeats: true)
}

最佳答案

嗯,主要问题是因为您在主线程上获取 JSON 数据,这就是 UI 卡住的原因。您应该在后台线程上异步分派(dispatch)此任务,而不是在主线程上执行此操作。

async后台任务结束时,iOS SDK会将程序流切换到主线程,您必须在主线程中使用获取的JSON数据更新UI组件。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// Get JSON data here

dispatch_async(dispatch_get_main_queue(), ^{
// Update UI here
});
});

关于json - 解析 JSON 卡住 tableView SWIFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38562639/

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