Ios 从代码中添加UIImage时崩溃
我是一个敏捷的初学者,我正在编写一个应用程序,它将显示一系列的东西。当你点击其中一个,你会得到关于它的详细信息和一张照片。然而,我有一个问题——我有代码来显示图像,但当我点击模拟器时,它崩溃了 应用程序崩溃时xcode底部的文本: 致命错误:在展开可选值时意外发现nilIos 从代码中添加UIImage时崩溃,ios,swift,uiimage,Ios,Swift,Uiimage,我是一个敏捷的初学者,我正在编写一个应用程序,它将显示一系列的东西。当你点击其中一个,你会得到关于它的详细信息和一张照片。然而,我有一个问题——我有代码来显示图像,但当我点击模拟器时,它崩溃了 应用程序崩溃时xcode底部的文本: 致命错误:在展开可选值时意外发现nil 谢谢 您应该查看崩溃堆栈以查看实际行。有几个地方你可能会遇到麻烦: var detail = segue.destinationViewController as! detailSkinsViewController 如果de
谢谢 您应该查看崩溃堆栈以查看实际行。有几个地方你可能会遇到麻烦:
var detail = segue.destinationViewController as! detailSkinsViewController
如果destinationViewController
不属于detailSkinsViewController
类,则会请求崩溃。(Swift类应该总是以大写字母开头。这也应该是let
,而不是var
。你永远不会修改它。)在这里使用if let
会更安全
detail.skinImg.image = UIImage(named: "s495fn")
现在还不清楚这些是什么,但是如果skining
是UIImageView代码>,则如果目标NIB尚未加载(这很可能),则可能会发生崩溃。正是出于这个原因,你通常不应该接触到其他物体。(这也是在IBOutlets中使用?
而不是!
的一个很好的理由。这将导致“什么都没发生”而不是崩溃。)
您应该在视图控制器本身上创建一个UIImage?
属性,而不是与其他视图控制器插座发生冲突。在其didSet
中,如果视图已加载(isViewLoaded
),则更新UIImageView
)。在viewDidLoad
期间,使用属性初始化UIImageView
。这样,您就有了一个清晰的API,让其他人可以设置不公开内部子视图(这些是实现细节)的映像
例如:
class ViewController: UIViewController {
@IBOutlet private var imageView: UIImageView?
var image: UIImage? {
didSet(newImage) {
self.imageView?.image = newImage
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.imageView?.image = self.image
}
}
您应该查看崩溃堆栈以查看实际的行。有几个地方你可能会遇到麻烦:
var detail = segue.destinationViewController as! detailSkinsViewController
如果destinationViewController
不属于detailSkinsViewController
类,则会请求崩溃。(Swift类应该总是以大写字母开头。这也应该是let
,而不是var
。你永远不会修改它。)在这里使用if let
会更安全
detail.skinImg.image = UIImage(named: "s495fn")
现在还不清楚这些是什么,但是如果skining
是UIImageView代码>,则如果目标NIB尚未加载(这很可能),则可能会发生崩溃。正是出于这个原因,你通常不应该接触到其他物体。(这也是在IBOutlets中使用?
而不是!
的一个很好的理由。这将导致“什么都没发生”而不是崩溃。)
您应该在视图控制器本身上创建一个UIImage?
属性,而不是与其他视图控制器插座发生冲突。在其didSet
中,如果视图已加载(isViewLoaded
),则更新UIImageView
)。在viewDidLoad
期间,使用属性初始化UIImageView
。这样,您就有了一个清晰的API,让其他人可以设置不公开内部子视图(这些是实现细节)的映像
例如:
class ViewController: UIViewController {
@IBOutlet private var imageView: UIImageView?
var image: UIImage? {
didSet(newImage) {
self.imageView?.image = newImage
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.imageView?.image = self.image
}
}
您应该查看崩溃堆栈以查看实际的行。有几个地方你可能会遇到麻烦:
var detail = segue.destinationViewController as! detailSkinsViewController
如果destinationViewController
不属于detailSkinsViewController
类,则会请求崩溃。(Swift类应该总是以大写字母开头。这也应该是let
,而不是var
。你永远不会修改它。)在这里使用if let
会更安全
detail.skinImg.image = UIImage(named: "s495fn")
现在还不清楚这些是什么,但是如果skining
是UIImageView代码>,则如果目标NIB尚未加载(这很可能),则可能会发生崩溃。正是出于这个原因,你通常不应该接触到其他物体。(这也是在IBOutlets中使用?
而不是!
的一个很好的理由。这将导致“什么都没发生”而不是崩溃。)
您应该在视图控制器本身上创建一个UIImage?
属性,而不是与其他视图控制器插座发生冲突。在其didSet
中,如果视图已加载(isViewLoaded
),则更新UIImageView
)。在viewDidLoad
期间,使用属性初始化UIImageView
。这样,您就有了一个清晰的API,让其他人可以设置不公开内部子视图(这些是实现细节)的映像
例如:
class ViewController: UIViewController {
@IBOutlet private var imageView: UIImageView?
var image: UIImage? {
didSet(newImage) {
self.imageView?.image = newImage
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.imageView?.image = self.image
}
}
您应该查看崩溃堆栈以查看实际的行。有几个地方你可能会遇到麻烦:
var detail = segue.destinationViewController as! detailSkinsViewController
如果destinationViewController
不属于detailSkinsViewController
类,则会请求崩溃。(Swift类应该总是以大写字母开头。这也应该是let
,而不是var
。你永远不会修改它。)在这里使用if let
会更安全
detail.skinImg.image = UIImage(named: "s495fn")
现在还不清楚这些是什么,但是如果skining
是UIImageView代码>,则如果目标NIB尚未加载(这很可能),则可能会发生崩溃。正是出于这个原因,你通常不应该接触到其他物体。(这也是在IBOutlets中使用?
而不是!
的一个很好的理由。这将导致“什么都没发生”而不是崩溃。)
您应该在视图控制器本身上创建一个UIImage?
属性,而不是与其他视图控制器插座发生冲突。在其didSet
中,如果视图已加载(isViewLoaded
),则更新UIImageView
)。在viewDidLoad
期间,使用属性初始化UIImageView
。这样,您就有了一个清晰的API供其他人设置不需要的图像