I am using URLSession to download image and mapping to the image item imageview. But getting crash on below line always. I tried using Kingfisher, but still getting crash on same line
URLSession :
class ImageFetchOperation: AsyncOperation {
let imageItem: ImageItem
let session: URLSession
private var dataTask: URLSessionDataTask?
var menuImageView: UIImageView!
init(imageItem:ImageItem, session:URLSession) {
self.imageItem = imageItem
self.session = session
}
override func main() {
if let imageUrl = URL(string: self.imageItem.imageUrl) {
var request = URLRequest(url: imageUrl)
request.httpMethod = "GET"
//request.cachePolicy = .returnCacheDataElseLoad
//print(imageUrl)
dataTask = session.dataTask(with: request as URLRequest, completionHandler: { [weak self] (data: Data?, response: URLResponse?, error: Error?) -> Void in
guard !(self?.isCancelled)! else {
self?.state = .isFinished
return
}
guard let data = data else {
self?.state = .isFinished
return
}
OperationQueue.main.addOperation {
self?.imageItem.image = UIImage.init(data:data) // Getting crash here
}
self?.state = .isFinished
})
dataTask?.resume()
}
else {
self.state = .isFinished
}
}
}
Kingfisher
if let imageUrl = self.imageItem.imageUrl.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) {
DispatchQueue.main.async {
self.menuImageView = UIImageView()
let url = URL(string: imageUrl)
self.menuImageView.kf.indicatorType = .activity
self.menuImageView!.kf.setImage(with: url, completionHandler: { [weak self] (image, error, cache, url) in
self?.imageItem.image = image // Getting crash here
self?.state = .isFinished
})
}
}
In both code getting crash on :
self?.imageItem.image = UIImage.init(data:data)
self?.imageItem.image = image
Any help would be great here.
Crash : Thread 12: EXC_BAD_ACCESS (code=1, address=0x2600010c)
Image URL is proper only:
https://upload.wikimedia.org/wikipedia/commons/6/6a/Johann_Sebastian_Bach.jpg
@objcMembers class ImageItem: NSObject {
let imageUrl: String
dynamic var image: UIImage!
init(imageUrl: String) {
self.imageUrl = imageUrl.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)!
self.image = nil
}
init(imageName: String) {
self.imageUrl = ""
self.image = UIImage(named: imageName)
}
}
Can you post your whole code, please? I tried to reproduce your code and it worked for me. Here is what I tried: