Xcode UIView.init(frame:) must be used from main thread only
Xcode 9 has a new runtime Main Thread Checker that detects call to UIKit from a background thread and generate warnings.
I know its meant to generate warnings and not crash the app, but you can try disabling Main Thread Checker for your test target.
I tried this code in a sample project, the debugger paused at the issue (as it is supposed to), but the app didn't crash.
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global().async {
let v = UIView(frame: .zero)
}
}
You can use this function
func downloadImage(urlstr: String, imageView: UIImageView) {
let url = URL(string: urlstr)!
let task = URLSession.shared.dataTask(with: url) { data, _, _ in
guard let data = data else { return }
DispatchQueue.main.async { // Make sure you're on the main thread here
imageview.image = UIImage(data: data)
}
}
task.resume()
}
How to use this function?
downloadImage(urlstr: "imageUrl", imageView: self.myImageView)
Main Thread Entry
You can enter the main thread as follows
DispatchQueue.main.async {
// UIView usage
}