Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从代码中添加UIImage时崩溃_Ios_Swift_Uiimage - Fatal编程技术网

Ios 从代码中添加UIImage时崩溃

Ios 从代码中添加UIImage时崩溃,ios,swift,uiimage,Ios,Swift,Uiimage,我是一个敏捷的初学者,我正在编写一个应用程序,它将显示一系列的东西。当你点击其中一个,你会得到关于它的详细信息和一张照片。然而,我有一个问题——我有代码来显示图像,但当我点击模拟器时,它崩溃了 应用程序崩溃时xcode底部的文本: 致命错误:在展开可选值时意外发现nil 谢谢 您应该查看崩溃堆栈以查看实际行。有几个地方你可能会遇到麻烦: var detail = segue.destinationViewController as! detailSkinsViewController 如果de

我是一个敏捷的初学者,我正在编写一个应用程序,它将显示一系列的东西。当你点击其中一个,你会得到关于它的详细信息和一张照片。然而,我有一个问题——我有代码来显示图像,但当我点击模拟器时,它崩溃了

应用程序崩溃时xcode底部的文本:

致命错误:在展开可选值时意外发现nil


谢谢

您应该查看崩溃堆栈以查看实际行。有几个地方你可能会遇到麻烦:

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供其他人设置不需要的图像