Swift: UIImageView - 在展开可选值时意外发现 nil
Swift: UIImageView - Unexpectedly found nil while unwrapping an Optional value
class DisplayImageVC: BasePageView { //BasePageView inherits from UIViewController
@IBOutlet weak var displayImage: UIImageView!
override func viewDidLoad() {
self.displayImage.backgroundColor = UIColor.yellowColor()
}
.....
在另一个 class 中,我尝试这个并得到一个致命错误:
var displayImageView = self._pageContent[1] as DisplayImageVC
displayImageView.displayImage.image = UIImage(named: ("displayChecklane"))
日志:
fatal error: unexpectedly found nil while unwrapping an Optional value
Images.xcassets
var displayImageView = self._pageContent[1] as DisplayImageVC
displayImageView.displayImage.image = UIImage(named: ("displayChecklane"))
你在第二行崩溃了。你知道这是因为有些东西是 nil,但你不知道这里的 nil 是什么。你假设它是图像。这是一个错误的假设;如果它是正确的,就不会崩溃,因为你没有强制展开它,并且将 nil 分配给图像视图的图像是合法的。
相反,考虑一下:也许 displayImageView.displayImage
是零。也就是说,nil 是你试图分配 到 的 UIImageView。这是有道理的,因为这是一个出口。如果 DisplayImageVC 的视图还没有加载,它的出口还没有被填充——它们仍然是零。
你如何解决这个问题取决于你想做什么。我个人认为你的方法从一开始就是假的;您无需设置另一个视图控制器的插座或其插座的 属性 或其界面的任何方面。您应该在 DisplayImageVC 中有一个 image
属性,在这里,您应该设置 属性;这样,当视图控制器显示它的视图时,它可以配置它自己的界面。
class DisplayImageVC: BasePageView { //BasePageView inherits from UIViewController
@IBOutlet weak var displayImage: UIImageView!
override func viewDidLoad() {
self.displayImage.backgroundColor = UIColor.yellowColor()
}
.....
在另一个 class 中,我尝试这个并得到一个致命错误:
var displayImageView = self._pageContent[1] as DisplayImageVC
displayImageView.displayImage.image = UIImage(named: ("displayChecklane"))
日志:
fatal error: unexpectedly found nil while unwrapping an Optional value
Images.xcassets
var displayImageView = self._pageContent[1] as DisplayImageVC
displayImageView.displayImage.image = UIImage(named: ("displayChecklane"))
你在第二行崩溃了。你知道这是因为有些东西是 nil,但你不知道这里的 nil 是什么。你假设它是图像。这是一个错误的假设;如果它是正确的,就不会崩溃,因为你没有强制展开它,并且将 nil 分配给图像视图的图像是合法的。
相反,考虑一下:也许 displayImageView.displayImage
是零。也就是说,nil 是你试图分配 到 的 UIImageView。这是有道理的,因为这是一个出口。如果 DisplayImageVC 的视图还没有加载,它的出口还没有被填充——它们仍然是零。
你如何解决这个问题取决于你想做什么。我个人认为你的方法从一开始就是假的;您无需设置另一个视图控制器的插座或其插座的 属性 或其界面的任何方面。您应该在 DisplayImageVC 中有一个 image
属性,在这里,您应该设置 属性;这样,当视图控制器显示它的视图时,它可以配置它自己的界面。