Кэш изображений PFFile в Swift 2.0

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

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

    var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! RidesCustomCell!
    if cell == nil {
        cell = RidesCustomCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
    }

    let currentDic = dataArray.objectAtIndex(indexPath.row) as! NSDictionary

    cell.backgroundColor = UIColor.clearColor()

    cell.txtName.text = currentDic.valueForKey("firstName") as? String
    cell.txtPrice.text = currentDic.valueForKey("price") as? String
    cell.txtTime.text = currentDic.valueForKey("date")as? String
    cell.txtFrom.text =  currentDic.valueForKey("from") as? String
    cell.txtTo.text = currentDic.valueForKey("to") as? String


    print(currentDic)
    cell.imgUser.image = UIImage(named: "noImg.png")


    if (currentDic.valueForKey("imageFile") != nil){

   //     let userImageFile = currentDic.valueForKey("imageFile") as! PFFile



        let queue : dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

        dispatch_async(queue, { () -> Void in
            print(currentDic)

            let pfuserGet =  currentDic.valueForKey("user") as! PFUser
            print(pfuserGet.username)
            print(pfuserGet.email)
            print(pfuserGet.password)


            let userImageFile = pfuserGet.objectForKey("profilePicture") as! PFFile
            userImageFile.getDataInBackgroundWithBlock {
                (imageData: NSData?, error: NSError?) -> Void in
                if error == nil {
                    if let imageData = imageData {
                        let image = UIImage(data:imageData)
                        cell.imgUser.image = image
                    }
                }
            }

        })

    }


    return cell;

}

person PAn Kaj Khatri    schedule 17.12.2015    source источник
comment
можете ли вы добавить свой cellForRowAtIndexPath и используете ли вы PFQueryTableViewController или UITableViewController?   -  person OverD    schedule 26.12.2015
comment
я использую UITableViewController   -  person PAn Kaj Khatri    schedule 28.12.2015
comment
Можете ли вы прикрепить свой код к cellForRoAtIndexPath   -  person OverD    schedule 28.12.2015
comment
где у вас есть PFQuery? если вы добавите свой код, я могу вам помочь   -  person OverD    schedule 29.12.2015
comment
Проверьте обновленный код   -  person PAn Kaj Khatri    schedule 29.12.2015
comment
Пожалуйста, проверьте мой ответ ниже   -  person OverD    schedule 04.01.2016


Ответы (1)


Я посмотрел на ваш код. Проблема заключается в PFFile.getDataInBackground() теперь, когда вы используете словари, я бы получил PFFile внутри вашего блока PFQuery и сохранил его в словаре как UImage() вместо PFFile.

И все, что вам нужно сделать в cellForRowAtIndexPath, это загрузить изображение из словаря.

Я думаю, это решит вашу проблему

person OverD    schedule 31.12.2015
comment
мы не можем использовать PFFile в качестве UIImage, если я использую PFFile в качестве UIImage, я получаю следующую ошибку: Не удалось преобразовать значение типа «PFFile» (0x10066f070) в «UIImage» (0x19f48b590). - person PAn Kaj Khatri; 05.01.2016
comment
Я сказал, что вы конвертируете из PFFile в UIimage внутри PFQuery и сохраняете его в словаре как UIImage.... в cellForRowAtIndexPath просто вызываете изображение из словаря..... если у вас все еще есть проблемы с ним, отправьте мне код вашего PFQuery, и я помогу вам с ним - person OverD; 05.01.2016