Jas*_*n G 3 uiimageview dispatch-async swift
我在viewItem中有一个默认图像,以确保它正常工作,该图像显示在splitview的详细信息视图上。
@IBOutlet weak var ImageView: UIImageView!
var imageCache = [String: UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
self.configureView()
}
func configureView() {
if let detail: AnyObject = self.detailItem {
if let label = self.detailDescriptionLabel {
let dict = detail as [String: String]
label.text = ""
let s = dict["result"]
let vr = NString(string: s!)
let vrd = vr.doubleValue
let value = ceil(vrd*20)
let valueString = String(format: "%.0f", value)
vresult.text = "\(valueString)%"
getPic(dict) // <---- trouble maker
fitem.hidden = false
ritem.hidden = false
}
} else {
navigationController?.popViewControllerAnimated(true)
}
}
func getPic(item: [String: String]) {
var chachedImage = self.imageCache[item["image"]!]
println(item["image"]) // <-- prints out the url
if cachedImage == nil {
var imgUrl = NSURL(string: item["image"]!)
let request: NSURLRequest = NSURLRequest(URL: imgUrl!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {( reponse: NSURLResponse!, data: NSData!, error; NSError!) -> Void in
if error == nil {
cachedImage = UIImage(data: data)
println("got here no problem") // <-- prints out
self.imageCache[item["image"]!] = cachedImage
println(self.imageCache) // <-- prints reference OK
dispatch_async(dispatch_get_main_queue(), {
self.ImageView.image = cachedImage // <---- offender
})
} else {
println("Error: \(error.localizedDescription)")
}
})
} else {
dispatch_async(dispatch_get_main_queue(), {
self.ImageView.image = cachedImage
})
}
}
Run Code Online (Sandbox Code Playgroud)
每次ImageView都为零。
fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)
但显示默认图像。我已经将其移出了调度程序,甚至尝试直接从viewDidLoad()始终将其设置为错误。它曾经是一个UIWebView,并且除了不会缓存任何内容外,它的运行情况非常好。由于加载这些图像需要大量工作,因此我认为缓存会很不错,因此可以在MASTER视图中缓存缩略图。
小智 5
这可能是由于您的视图控制器的稳定性如何。
let vc = MyViewController()
Run Code Online (Sandbox Code Playgroud)
这样的事情是行不通的。创建VC时,实际上并没有为情节提要板提供链接IBOutlets的机会。改为使用
storyboard.instantiateViewControllerWithIdentifier(identifier: String)
Run Code Online (Sandbox Code Playgroud)
您可能需要使用以下内容获得故事板的参考
let storyboard = UIStoryboard(name: name, bundle: NSBundle.mainBundle())
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
3403 次 |
| 最近记录: |