我在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
})
}
}
ImageView每次都是零。
fatal error: unexpectedly found nil while unwrapping an Optional value
但默认图片显示。我已经将其从调度中移出,甚至尝试从viewDidLoad()始终设置错误。它曾经是一个UIWebView并且完美地工作,除了它不会缓存任何东西。由于加载这些图像是很多工作,我认为缓存会很好,我已经在MASTER视图中为缩略图工作了缓存。
答案 0 :(得分:4)
这可能是因为你的视图控制器是如何实现的。
let vc = MyViewController()
这样的事情不会奏效。您正在创建VC而不实际为故事板提供链接IBOutlet的机会。而是使用
storyboard.instantiateViewControllerWithIdentifier(identifier: String)
您可能需要使用
参考故事板let storyboard = UIStoryboard(name: name, bundle: NSBundle.mainBundle())
希望这会有所帮助:)
答案 1 :(得分:0)
傻傻的我。我已经为此工作了几天,我有个好主意尝试更改名称,并且它有效。我尝试将其更改回来并且它已损坏,显然您无法将ImageView用作变量!
答案 2 :(得分:0)
除了可读性/可维护性之外,更改变量名称应该没有任何区别,除非存在命名空间冲突(很好地理解为什么/可能发生的位置)。我也想知道 - 你让IBOutlet变得虚弱无力。当对象的最后剩余强引用消失时,运行符/垃圾收集器自动将对对象的弱引用设置为nil。 (查看Swift文档的那一部分,如果你不是很扎实的话)。
也许你应该通过添加deinit {println(,“ function name deallocated'}来检查你的类和控制器。在使用改变变量名称时看到的弱行为和改进行为之间,似乎就像你的应用程序本身可能会发生一些奇怪的(错误的)交互。
答案 3 :(得分:0)
我的情况是因为我使用的是nib
而没有注册。
一旦我注册了它,它就会起作用
答案 4 :(得分:0)
我用过的情况不同
<块引用>awakeFromNib()
代替
<块引用>viewDidLoad()
.