2016-09-11 2 views
-2

URL에서 이미지를 캐싱하여 테이블 스크롤을보다 부드럽게하려고합니다. 이것은 캐싱하지 않는 것 같고 내가 뭘 잘못하고 있는지 알 수 없습니다. 아무도이게 뭐가 잘못 됐는지 말해 줄 수 있니? 새로운 다운로드를 발사하기 전에 다른 {이 있어야처럼빠른 이미지 캐시가 작동하지 않습니다.

let imageCache = NSCache() 

extension UIImageView { 

    func loadImageUsingCacheWithUrlString(urlString: String) { 

     self.image = nil 

     //check cache for image first 
     if let cachedImage = imageCache.objectForKey(urlString) as? UIImage { 
      self.image = cachedImage 
      return 
     } 

     //otherwise fire off a new download 
     let url = NSURL(string: urlString) 
     NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) in 

      //download hit an error so lets return out 
      if error != nil { 
       print(error) 
       return 
      } 

      dispatch_async(dispatch_get_main_queue(), { 

       if let downloadedImage = UIImage(data: data!) { 
        imageCache.setObject(downloadedImage, forKey: urlString) 

        self.image = downloadedImage 
       } 
      }) 

     }).resume() 
    } 
} 

는 느낌,하지만 난 그것을 잘 작동했다 생각하지 않는 것을 시도하더라도. 나는이 방법으로 테이블을 스크롤하여 모든 이미지를 캐싱 할 수있는 기회가 있는지 확인한 다음 전체 다운로드 부분을 삭제하여 캐시 된 이미지 만로드하고 이미지가 나타나지 않도록했습니다. 그것이 실제로 그것들을 캐싱하고 있다고 생각하십시오.

+0

사람들이 투표를 거절하는 이유는 무엇입니까 ?? –

+0

이미지를 기기에 저장하고 싶으므로 앱을 닫고 다시 열면 이미지를 다시 다운로드하지 않고도 이미지를 볼 수 있습니다. –

+0

예 테이블을보다 부드럽게 스크롤 할 수 있도록 이미지를 캐시하고 싶습니다. 또한 오프라인에서 사용할 수있게되기를 바랬습니다. –

답변

0

오케이 죄송합니다. 좋은 질문이었습니다. 이것은 결국 효과가 있습니다 :

var imageCache = NSMutableDictionary() 

extension UIImageView { 

    func loadImageUsingCacheWithUrlString(urlString: String) { 

     self.image = nil 

     if let img = imageCache.valueForKey(urlString) as? UIImage{ 
      self.image = img 
     } 
     else{ 
      let session = NSURLSession.sharedSession() 
      let task = session.dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in 

       if(error == nil){ 

        if let img = UIImage(data: data!) { 
         imageCache.setValue(img, forKey: urlString) // Image saved for cache 
         dispatch_async(dispatch_get_main_queue(), {() -> Void in 
         self.image = img 
        }) 
        } 


       } 
      }) 
      task.resume() 
     } 
    } 
} 

나는 뭔가 이상한 것 같아요.

관련 문제