gpt4 book ai didi

ios - 滚动到底部并添加新行时 UITableView 卡住

转载 作者:搜寻专家 更新时间:2023-11-01 07:15:02 25 4
gpt4 key购买 nike

当我滚动到 UITableView 的底部时,应用程序假设调用一个函数(“CallAlamo(url:nextSearchURL)”),它只是将新内容附加到数组,然后调用 tableView.reloadData() 和 tableview然后用更多内容更新。但是,在此过程中,tableView 会完全卡住大约 2-3 秒。我怎样才能让它不卡住并像其他应用程序中的大多数表格 View 一样工作,在这些应用程序中正在加载新内容并且用户可以自由移动表格 View 。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
let lastElement = posts.count - 1
if indexPath.row == lastElement {

callAlamo(url: nextSearchURL) //appends new content to array
tableView.reloadData()

}
}

更新

这就是 callAlamo 所做的:

func callAlamo(url : String){
Alamofire.request(url).responseJSON(completionHandler: {
response in

self.parseData(JSONData: response.data!)

})
}

func parseData(JSONData : Data){

do{
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard
//print(readableJSON)
if let tracks = readableJSON["tracks"] as? JSONStandard{
nextSearchURL = tracks["next"] as! String
if let items = tracks["items"] as? [JSONStandard]{
//print(items) //Prints the JSON information from Spotify
for i in 0..<items.count{
let item = items[i]
let name = item["name"] as! String
let previewURL = item["preview_url"] as! String
if let album = item["album"] as? JSONStandard{
if let images = album["images"] as? [JSONStandard],let artist = album["artists"] as? [JSONStandard]{
let imageData = images[0] //this changes the quality of the album image (0,1,2)
let mainImageURL = URL(string: imageData["url"] as! String)
let mainImageData = NSData(contentsOf: mainImageURL!)

let mainImage = UIImage(data: mainImageData as! Data)

let artistNames = artist[0]
let artistName = artistNames["name"] as! String

posts.append(post.init(mainImage: mainImage, name: name, artistName: artistName, previewURL: previewURL))
self.tableView.reloadData()
}
}
}
}
}
} catch{
print(error)
}
}

更新 2

使用@Anbu.Karthik 选择 2:

问题 1:“imageData”会成为我的“mainImagedata”吗?

问题 2:我在 Alamofire.request 中收到一个错误...说“调用中有额外的参数‘方法’”,当我删除它时,我收到一个错误说“NSData?没有下标成员”

最佳答案

非常糟糕的代码设计,你应该将 url 传递给单元格并让它进行抓取和解析,而你是在主队列上这样做的。您可以使用(使用另一个队列)DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async 来执行此操作。 IDK if Alamofire 在主队列上调用你的闭包,但它看起来像是在它上面执行请求。当您想使用 DispatchQueue.main.async

对 UI 进行操作时,不要忘记回到主队列

更新:我希望 reloadData() 很清楚,有点给你一个无限循环,你应该在 TableViewDataSource 函数之外调用它们

更新 2:我在这里没有看到它,但您应该使用 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 并在其中使用 let cell = tableView.dequeueReusableCell .....

关于ios - 滚动到底部并添加新行时 UITableView 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42606145/

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