9
我目前升級到swift 3.0我無法讓NSCache在下面工作是我目前擁有的代碼。我沒有看到任何我錯過我不知道我到底做了什麼錯。提前謝謝你swift 3 NSCache不起作用
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()
})
}
}
你確定它斯威夫特3之前工作過嗎?除非我弄錯了,否則每次調用方法時,都會在'let imageCache = NSCache()'中創建一個新的* empty *緩存。 –
@MartinR我檢查並在方法外放置了'let imageCache = NSCache()'。它也看起來像緩存工作,只有當它在'NSUrlSession'裏面後,它變成'nil'我不確定'.resume'與它有什麼關係。請看修改問題。 – pprevalon