Сбой при ускоренной прокрутке во время асинхронной загрузки изображения

#ios #swift #lazy-loading

#iOS #swift #отложенная загрузка

Вопрос:

Я хочу загрузить изображение асинхронно и загрузить его в UIImageView ячейки, аналогично отложенной загрузке в SWIFT.

 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
    {

    //Creating instance of class UITableViewCell
    var cell : CustomTableViewCell!

    //Asigning a value to a variable
    num = indexPath.row

    //Calling a UITableview method  dequeueReusableCellWithIdentifier suing self.tableviewcustom in swift
    cell = self.tableViewCustom.dequeueReusableCellWithIdentifier(cellIdentifier) as CustomTableViewCell
    cell.setView()
    var teamdict = DataController.sharedInstance.team.objectAtIndex(indexPath.row) as NSDictionary

    cell.label.text = teamdict.valueForKey("name") as NSString

    //Creating a instance of UITableview ans also as property
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,uintmax_t()),
        {
            let url = NSURL.URLWithString(teamdict.valueForKey("logo") as NSString)

            let imgData = NSData.dataWithContentsOfURL(url, options: NSDataReadingOptions(), error: nil)

            if imgData
            {
                let image = UIImage(data: imgData)
                dispatch_sync(dispatch_get_main_queue(),
                    {
                        (self.tableViewCustom.cellForRowAtIndexPath(indexPath) as CustomTableViewCell).teamImgVw.image = image
                    }
                )
            }

        })

    return cell

}
  

я смог загрузить и отобразить изображение, когда просмотр таблицы прокручивается с нормальной скоростью, но приложение выходит из строя, когда просмотр таблицы прокручивается быстрее.

Ответ №1:

Это утверждение ( self.tableViewCustom.cellForRowAtIndexPath(indexPath) ) приведет к рекурсивному вызову метода.

 dispatch_sync(dispatch_get_main_queue(),
 {
      (self.tableViewCustom.cellForRowAtIndexPath(indexPath) as CustomTableViewCell).teamImgVw.image = image
 })
  

Вы пытаетесь вызвать тот же метод в этом методе.