दिलचस्प पोस्ट
MFMailComposeViewController छवि अभिविन्यास एमपीआई पर 2 डी सरणी भेजना और प्राप्त करना C ++ अंतर्निहित प्रतिलिपि निर्माता जो कि अन्य वस्तुओं वाले वर्ग के लिए मेलो यूआरआई के माध्यम से फ़ाइल संलग्न करें JSON सरणी के रूप में json_encode sparse PHP सरणी, JSON ऑब्जेक्ट नहीं सी में हेक्साडेसिमल फ्लोटिंग स्थिर वीएस 2015. एएसपी.नेट 5 वेब प्रोजेक्ट के लिए सही लक्ष्य ढांचा तय करना MySQL डाटाबेस में लिंक्ड सूची प्राप्त करना ReSharper में C # 6.0 को अक्षम करें समायोजित करेंटेकबंदी को संपादित करने से कीबोर्ड को रोकने में नहीं मैं कैसे परीक्षण कर सकता हूँ यदि एक चर एक संख्या में है Bash? नया एंड्रॉइड एक्शनबार समर्थन के लिए थीम। AppCompat.Light नहीं मिल सकता है आईओएस पर उपकरण बनाने और मॉडल कैसे प्राप्त करें? टैब को 4 रिक्त स्थान के रूप में फिर से परिभाषित करें सी ++ 11 में थ्रेड पूलिंग

स्विफ्ट एसिंक लोड छवि

मैं यूआरएल async से शो छवि पर काम कर रहा हूँ मैंने डाउनलोड छवि के लिए एक नया थ्रेड बनाने का प्रयास किया है और फिर main thread पर रीफ़्रेश करें

 func asyncLoadImg(product:Product,imageView:UIImageView){ let downloadQueue = dispatch_queue_create("com.myApp.processdownload", nil) dispatch_async(downloadQueue){ let data = NSData(contentsOfURL: NSURL(string: product.productImage)!) var image:UIImage? if data != nil{ image = UIImage(data: data!) } dispatch_async(dispatch_get_main_queue()){ imageView.image = image } } } 

जब मैं डिबग करने की कोशिश कर रहा था, जब यह डिस्पैच_असिनक (डाउनलोड क्यू्यू) की बात आती है, तो यह फ़ंक्शन को बाहर कूदता है कोई उपाय? धन्यवाद

Solutions Collecting From Web of "स्विफ्ट एसिंक लोड छवि"

स्विफ्ट 3 अपडेट किए गए कोड:

 extension UIImageView { public func imageFromServerURL(urlString: String) { URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { (data, response, error) -> Void in if error != nil { print(error) return } DispatchQueue.main.async(execute: { () -> Void in let image = UIImage(data: data!) self.image = image }) }).resume() }} 

स्विफ्ट 2.2 कोड:

  extension UIImageView { public func imageFromServerURL(urlString: String) { NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in if error != nil { print(error) return } dispatch_async(dispatch_get_main_queue(), { () -> Void in let image = UIImage(data: data!) self.image = image }) }).resume() }} 

अब जहाँ भी आपको आवश्यक है, सर्वर यूआरएल से छवि को लोड करने के लिए ऐसा करें:

UIImageView.imageFromServerURL ("यहां सर्वर यूआरएल")।

सरल !

Swift3 में extension का उपयोग करें नेटवर्क समस्या को हल करने के लिए मैं आपको NSCache उपयोग करने की सलाह देता NSCache :

 import UIKit let imageCache = NSCache<NSString, AnyObject>() extension UIImageView { func loadImageUsingCache(withUrl urlString : String) { let url = URL(string: urlString) self.image = nil // check cached image if let cachedImage = imageCache.object(forKey: urlString as NSString) as? UIImage { self.image = cachedImage return } // if not, download image from url URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in if error != nil { print(error!) return } DispatchQueue.main.async { if let image = UIImage(data: data!) { imageCache.setObject(image, forKey: urlString as NSString) self.image = image } } }).resume() } } 

आशा है कि यह मदद करो!

शोभार तिवारी के उत्तर से आगे बढ़ते हुए, मुझे लगता है कि इन मामलों में अक्सर त्रुटि के मामले में एक डिफ़ॉल्ट छवि है, और लोड करने के उद्देश्य से, इसलिए मैंने इसे एक वैकल्पिक डिफ़ॉल्ट छवि शामिल करने के लिए अपडेट किया है:

स्विफ्ट 3

 extension UIImageView { public func imageFromServerURL(urlString: String, defaultImage : String?) { if let di = defaultImage { self.image = UIImage(named: di) } URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { (data, response, error) -> Void in if error != nil { print(error ?? "error") return } DispatchQueue.main.async(execute: { () -> Void in let image = UIImage(data: data!) self.image = image }) }).resume() } } 

यहां ये कोड आपकी मदद कर सकता है

  let cacheKey = indexPath.row if(self.imageCache?.objectForKey(cacheKey) != nil){ cell.img.image = self.imageCache?.objectForKey(cacheKey) as? UIImage }else{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { if let url = NSURL(string: imgUrl) { if let data = NSData(contentsOfURL: url) { let image: UIImage = UIImage(data: data)! self.imageCache?.setObject(image, forKey: cacheKey) dispatch_async(dispatch_get_main_queue(), { cell.img.image = image }) } } }) } 

इस छवि को डाउनलोड करने और टेबल व्यू स्क्रॉल के बिना कैश को कैश करेंगे

यह समाधान अनावश्यक छवि अपडेट के बिना वास्तव में तेजी से स्क्रॉल करना है आपको हमारे सेल क्लास में यूआरएल प्रॉपर्टी जोड़नी है:

 class OfferItemCell: UITableViewCell { @IBOutlet weak var itemImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! var imageUrl: String? } 

और एक्सटेंशन जोड़ें:

 import Foundation import UIKit let imageCache = NSCache<AnyObject, AnyObject>() let imageDownloadUtil: ImageDownloadUtil = ImageDownloadUtil() extension OfferItemCell { func loadImageUsingCacheWithUrl(urlString: String ) { self.itemImageView.image = nil if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage { self.itemImageView.image = cachedImage return } DispatchQueue.global(qos: .background).async { imageDownloadUtil.getImage(url: urlString, completion: { image in DispatchQueue.main.async { if self.imageUrl == urlString{ imageCache.setObject(image, forKey: urlString as AnyObject) self.itemImageView.image = image } } }) } } } 

आप इसे सुधार भी सकते हैं और कुछ कोड को एक और अधिक सामान्य सेल वर्ग से निकाल सकते हैं अर्थात कस्टमसेल विथ इमेज इसे अधिक पुन: प्रयोज्य बनाने के लिए।