2016-04-23 23 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