私はこの問題が約3〜4週間あります。私はグーグルでは、すべてをチェックしたが、まだ動作していない。私を助けてください!スクロール中のスクロール中にUITableViewフリーズ
スクロールするたびにcellForRowAtIndexPath
はtableView
をリロードしてフリーズします。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("cell")! as! MoviesTVC
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),{
let dictionary = self.rows[indexPath.row] as? [String: AnyObject]
dispatch_async(dispatch_get_main_queue(),{
cell.setCell(dictionary!)
})
})
return cell
}
setCell()
機能:
func setCell(dictionary: AnyObject){
let ImgString = dictionary["src"] as? String;
let ImgUrl = NSURL(string: ImgString!);
let ImgData = NSData(contentsOfURL: ImgUrl!)
self.movImg.image = UIImage(data: ImgData!);
self.movName.text = dictionary["name"] as? String;
self.movComment.text = dictionary["caption"] as? String;
}
以下のPutz1103の観察に加えて、セルを非同期に更新するこのプロセスは、コード(または彼)が意図しているよりも複雑です。あなたは、(a)非同期要求が完了するまでにセルを再利用すること、 (b)ビューからスクロールされたセルに対する保留中の要求の後に、可視セル画像要求がバックログされる高速スクロール;参照してください。これをすべてうまくやっていることは自明ではなく、非同期イメージ検索をより適切に処理するUIImage拡張を検討することもできます。 http://stackoverflow.com/a/33505649/1271826を参照してください。 – Rob
おそらく、非同期呼び出し後にセルが指定されたインデックスパスに対応しているかどうかをチェックする必要があります(オフスクリーンでスクロールされている可能性があります)。また、!オペレータ、多分あなたは "もしlet"を使用する必要があります –