UITableViewの一番下までスクロールすると、アプリケーションは配列に新しいコンテンツを追加するだけの関数( "CallAlamo(url:nextSearchURL)") tableView.reloadData()を呼び出すと、より多くのコンテンツでtableviewが更新されます。ただし、このプロセス中、tableViewは約2〜3秒間完全にフリーズします。ほとんどのテーブルビューは、新しいコンテンツがロードされているユーザーが自由にテーブルビューを移動できる他のアプリで行うように、フリーズして動作させないようにするにはどうすればよいですか。下にスクロールして新しい行を追加すると、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)
}
}
はUPDATE Anbu.Karthik選択肢2 @使用して2
:
質問1 : "imageData"は私の "mainImagedata"になりますか?
質問2:Alamofire.requestでエラーが発生しました。「余分な引数のメソッドが呼び出されました」というメッセージが表示され、削除すると「NSDataにサブスクリプトメンバがありません」というエラーメッセージが表示されます
の必要はありませんを使用する必要があり、この 'tableView.reloadDataは()'あなたはcallAlamo 'のコードを表示することができます(u' –
@ Anbu.Karthikはちょうどそれを更新しました。私はcallAlamoのtableView.reloadData()も呼び出すことがわかりましたが、tableView funcでtableView.reloadData()を取り出しました。それでもまだフリーズします – OriginalAlchemist
確かに、あなたは 'を使用していますbzは、let mainImageURL = URL(string:imageData [" url "] as!文字列) let mainImageData = NSData(contentsOf:mainImageURL!) '、メインスレッドに影響します。 –