在异步映像下载期间滚动速度更快时崩溃

时间:2014-07-02 06:37:16

标签: ios swift lazy-loading

我想异步下载图像并将其加载到 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 个答案:

答案 0 :(得分:2)

此语句(self.tableViewCustom.cellForRowAtIndexPath(indexPath))将导致递归方法调用。

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

你试图在该方法中调用相同的方法。