2016-09-18 24 views
9

Şu an için 3.0 sürümüne yükseltme yapıyorum NSCache'nin çalışması için şu anda sahip olduğum kodun altında değilim. Hiçbir şey göremiyorum Im'm Im 'yanlış ne yapıyorum emin değilim. şimdiden teşekkürlerswift 3 NSCache çalışmıyor

class myClass { 
    let imageCache = NSCache() 

    func downloadImageByUserId(userId:String,imageView:UIImageView){ 

     print(userId) 
     fireBaseAPI().childRef("version_one/frontEnd/users/\(userId)").observeEventType(.Value, withBlock: {snapshot in 
      let imageUrl = snapshot.value!["profileImageUrl"] as! String 

      // check image cache 
      print(self.imageCache.objectForKey(imageUrl)) 
      if let cacheImage = self.imageCache.objectForKey(imageUrl) as? UIImage{ 
       print("image cache") 
       imageView.image = cacheImage 
       return 
      } 
      print("image not cache") 
      //retrieve image 
      let url = NSURL(string: imageUrl) 

      NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, resposn, error) in 
       if error != nil { 
        print(error) 
        return 
       } 

       dispatch_async(dispatch_get_main_queue(),{ 
        if let downloadImage:UIImage = UIImage(data: data!){ 
         self.imageCache.setObject(downloadImage, forKey: imageUrl) 
         imageView.image = downloadImage 
        } 
       }) 

      }).resume() 
     }) 
    } 
} 
+2

Are: Bu hızlı Dictionary gibi davranır

, sen Key ve Value Türü vermek gerekir? Yanılmıyorsam, yönteminiz her çağrıldığında 'imageCache = NSCache() 'şeklinde yeni bir * boş * önbellek yaratıyorsunuz. –

+0

@MartinR kontrol ettim ve 'imageCache = NSCache()' yönteminin dışında bıraktım. Aynı zamanda önbellek çalışması sadece NSUrlSession 'içinde olduğu zaman' nil 'haline geldiğine benziyor.' .resume 'bununla bir ilgisi olup olmadığından emin değilim. Lütfen gözden geçirilmiş soruya bakın. – pprevalon

cevap

27

NSCache Swift 3.0 Swifty daha fazlasıdır. Eğer Swift 3 önce çalışmış emin

let imageCache = NSCache<NSString, UIImage>()