當我滾動到UITableView的底部時,應用程序應該調用一個函數(「CallAlamo(url:nextSearchURL)」),它只是將新內容附加到數組,然後調用tableView.reloadData(),然後用更多的內容更新tableview。但是,在此過程中,tableView完全凍結約2-3秒。我怎樣才能讓它不像其他應用中的大多數表視圖那樣被凍結和工作,其中新內容被加載並且用戶可以自由移動tableview。當滾動到底部並添加新行時,UITableView凍結
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()
}
}
UPDATE
這是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?沒有下標成員「
不需要這種'tableView.reloadData()'可以顯示callAlamo的'代碼(u' –
@ Anbu.Karthik沒關係只是更新了它,我知道我也在callAlamo中調用tableView.reloadData(),但是我在tableView func中取出了tableView.reloadData()仍然凍結 – OriginalAlchemist
你肯定需要,因爲你正在使用'let mainImageURL = URL(string:imageData [「url」] as!字符串) let mainImageData = NSData(contentsOf:mainImageURL!)',它會影響主線程, –