2016-09-18 26 views
9

Tôi hiện đang nâng cấp lên nhanh chóng 3.0 Tôi không thể làm cho NSCache hoạt động dưới đây là mã mà tôi hiện đang có. Tôi không thấy bất cứ điều gì Im thiếu Im không chắc chắn chính xác những gì Im làm sai. cảm ơn bạn trướcnhanh chóng 3 NSCache không hoạt động

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

Bạn có chắc chắn rằng nó đã làm việc trước khi Swift 3? Trừ khi tôi nhầm, bạn đang tạo một bộ đệm * trống * mới trong 'let imageCache = NSCache()' mỗi khi phương thức của bạn được gọi. –

+0

@MartinR Tôi đã kiểm tra và đặt 'let imageCache = NSCache()' bên ngoài phương thức. nó cũng giống như bộ nhớ đệm làm việc chỉ khi nó là bên trong 'NSUrlSession' sau đó nó trở thành' nil' Tôi không chắc chắn nếu '.resume' có bất cứ điều gì để làm với nó. Vui lòng xem câu hỏi sửa đổi. – pprevalon

Trả lời

27

NSCache là Swifty in Swift 3.0.

Nó hoạt động như nhanh chóng Dictionary, bạn cần phải cung cấp cho các Loại KeyValue:

let imageCache = NSCache<NSString, UIImage>() 
Các vấn đề liên quan