gpt4 book ai didi

ios - 从代码添加 UIImage 时崩溃

转载 作者:行者123 更新时间:2023-11-28 11:18:14 27 4
gpt4 key购买 nike

我是 Swift 初学者,我正在编写一个可以显示事物列表的应用程序。当您单击其中一个时,您将获得有关它的详细信息和一张照片。但是,我遇到了一个问题——我有显示图像的代码,但是当我在模拟器中单击时它崩溃了。

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

fatal error: unexpectedly found nil while unwrapping an Optional value

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var detail = segue.destinationViewController as! detailSkinsViewController
detail.skinNameLabel = self.skin
if (self.skin == "AK47 | Wasteland Rebel") {
detail.skinImg.image = UIImage(named: "s495fn")
}
}

谢谢!

最佳答案

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

var detail = segue.destinationViewController as! detailSkinsViewController

如果 destinationViewController 不属于类 detailSkinsViewController,则请求崩溃。 (Swift 类应始终以大写字母开头。这也应该是 let,而不是 var。您永远不要修改它。)使用 if-let 在这里会更安全。

    detail.skinImg.image = UIImage(named: "s495fn")

目前还不清楚这些是什么,但如果 skinImg 是一个 UIImageView!,那么如果目标 NIB 尚未加载,您会认为它会崩溃(这很可能)。正是出于这个原因,您通常永远不应该接触其他对象 IBOutlets。 (这也是对 IBOutlet 使用 ? 而不是 ! 的一个很好的理由。这将导致“什么都没有发生”而不是崩溃。)

与其弄乱另一个 View Controller socket ,不如在 View Controller 本身上创建一个 UIImage? 属性。在其 didSet 中,如果 View 已加载 (isViewLoaded),则更新 UIImageView。在 viewDidLoad 期间,使用属性初始化 UIImageView。这样,您就有了一个清晰的 API,供其他人设置不公开您的内部 subview (这是实现细节)的图像。

举个例子:

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
}
}

关于ios - 从代码添加 UIImage 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349933/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com