gpt4 book ai didi

ios - 如何防止 UI 快速卡住?

转载 作者:行者123 更新时间:2023-11-28 07:25:04 25 4
gpt4 key购买 nike

我在下面的代码中使用 URLSession 时从服务器获取了一些数据。当我在代码中使用此静态方法在其他一些 View Controller 中获取数据(我的意思是 View 加载方法)以填充 Collection View 时,我的 UI 可能会卡住 2 秒,我认为它不应该那样。我的错误在哪里?

 class RelatedData{
static func get(_ Url:String?,completion:@escaping (Array<Game>,Int)-> Void){
guard let url = Url else{
return
}
var request = URLRequest(url: URL(string:url )!)
var gameArray = [Game]()
var status:Int!
request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
do{
print("Here we are in related games")
let allData = try JSONDecoder().decode(RelaedGameObject.self, from: data)
status = allData.status
gameArray = allData.data
DispatchQueue.main.async{
let container = gameArray
completion(container,status)
gameArray.removeAll()
}
}
catch{
print(" Related Api Don't Work!!!")
}
}
task.resume()
}

}


//And This Is View Controller Call :


RelatedData.get(url){(Games,status) in
if status == 1{
self.relatedGames = Games
if Games.count == 0 {
self.label.font = UIFont(name: "IRANSans", size: 13)
self.relatedCollectionView.backgroundView = self.label
self.relatedLabel.isHidden = false
}else{
self.relatedLabel.isHidden = false
self.relatedCollectionView.isHidden = false
self.relatedCollectionView.reloadData()
self.relatedCollectionView.transform =CGAffineTransform(scaleX: -1.0, y: 1.0)
self.relatedActivityIndicator.stopAnimating()
}
}else{
print("Err in related games")
}
}
}

最佳答案

不是在 get(_:completion:) 方法的 do-catch 语句中添加对 DispatchQueue.main.async 的调用,将它移动到 controller 中,您将在 completion 处理程序中获得响应,即

RelatedData.get(url){(Games,status) in
DispatchQueue.main.async {
//add your code here...
}
}

关于ios - 如何防止 UI 快速卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828243/

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