2016-04-23 1 views
1

J'ai une vue de collection qui a 12 images que je récupère d'un appel de réseau. J'utilise NSCache pour les mettre en cache. Je veux savoir comment je peux supprimer une image spécifique à partir de là? J'ai fourni un code ci-dessous pour montrer comment j'ai mis en cache les images. Merci!Comment supprimer une image spécifique de 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 Vient de poster dès maintenant! – SteveSmith

Répondre

3

NSCache est la version plus intelligente de classe NSDictionary qui partage la même API pour récupérer, ajouter ou supprimer des éléments.

Ainsi, vous pouvez supprimer un élément de l'aide même méthode que si vous le faites à partir d'un dictionnaire:

HomepageCollectionViewController.imageCache.removeObjectForKey(image.imageUrl!) 

Vous pouvez mettre à jour votre code pour supprimer l'image du cache que vous êtes sur le point de montrer:

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

Merci pour l'aide! – SteveSmith