9
मैं वर्तमान में स्विफ्ट 3.0 में अपग्रेड करता हूं, मैं नीचे काम करने के लिए एनएससीएच प्राप्त करने में सक्षम नहीं हूं, जो वर्तमान में मेरे पास है। मुझे कुछ भी नहीं दिख रहा है मैं लापता हूं मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं। अग्रिमस्विफ्ट 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 से पहले काम कर रहे हैं:
यह तेज
Dictionary
तरह काम करता है, तो आपKey
औरValue
प्रकार देने के लिए की आवश्यकता है? जब तक कि मैं गलत नहीं हूं, आप अपनी विधि कहने पर हर बार 'छवि imageCache = NSCache()' में एक नया * खाली * कैश बना रहे हैं। –@MartinR मैंने विधि के बाहर 'imageCache = NSCache()' को चेक और रख दिया। यह केवल कैश काम की तरह दिखता है जब यह 'NSUrlSession' के अंदर होता है, तब यह 'शून्य' बन जाता है, मुझे यकीन नहीं है कि' .resume' के साथ कुछ भी करने के लिए है। कृपया संशोधित प्रश्न देखें। – pprevalon