2016-04-23 2 views
1

У меня есть вид коллекции, который имеет 12 изображений, которые я извлекаю из сетевого вызова. Я использую NSCache для их кеширования. Я хочу знать, как я могу удалить определенный образ оттуда? Я привел некоторый код ниже, чтобы показать, как я кэшировал изображения. Благодаря!Как удалить определенное изображение из NSCache?

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("imageReuseCell", forIndexPath: indexPath) as! ImageCollectionViewCell 

    let image = hingeImagesArray[indexPath.row] 


    //Start animating activity indicator 
    cell.actitivityIndicator.startAnimating() 

    if let imageURL = image.imageUrl { 

     if let url = NSURL(string: imageURL) { 

      //Check for cached images and if found set them to cells - works if images go off screen 
      if let myImage = HomepageCollectionViewController.imageCache.objectForKey(image.imageUrl!) as? UIImage { 

       cell.collectionViewImage.image = myImage 


      }else { 


      // Request images asynchronously so the collection view does not slow down/lag 
      let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, response, error) -> Void in 


        // Check if there is data returned 
        guard let data = data else { 

        print("There is no data") 
         return 
        } 

        if let hingeImage = UIImage(data: data){ 

         //Cache images/set key for it 
         HomepageCollectionViewController.imageCache.setObject(hingeImage, forKey: image.imageUrl!) 

         // Dispatch to the main queue 
         dispatch_async(dispatch_get_main_queue(), {() -> Void in 

         //Hide activity indicator and stop animating 
         cell.actitivityIndicator.hidden = true 
         cell.actitivityIndicator.stopAnimating() 

         //Set images to collection view 
         cell.collectionViewImage.image = hingeImage 


         }) 

        } 

       }) 

      task.resume() 

      } 
     } 

    } 

    return cell 
} 
+0

@ozgur Только что отправлено сейчас! – SteveSmith

ответ

3

NSCache является умнее версия класса NSDictionary, который разделяет те же API для извлечения, добавления или удаления элементов.

Таким образом, вы можете удалить элемент из него, используя тот же метод, как если бы вы из словаря:

HomepageCollectionViewController.imageCache.removeObjectForKey(image.imageUrl!) 

Вы можете обновить свой код, чтобы удалить изображение из кэша, что вы только о том, чтобы показать:

if let myImage = HomepageCollectionViewController.imageCache.removeObjectForKey(image.imageUrl!) as? UIImage { 
    // myImage was removed from cache. 
    cell.collectionViewImage.image = myImage 
    ... 
+0

Спасибо за помощь! – SteveSmith

Смежные вопросы