我可以使用segue准备功能详细浏览滚动视图



获取以下错误消息

"致命错误:在解开可选值时出乎意料地发现了零"

在这部分所有图像都没有问题。

(segue.destination as! DetailViewController).imgView.image = UIImage(named: "horsestar.png")!

以下代码是整个准备功能

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if segue.identifier == "dog" {
        let imgView = UIImageView(image: UIImage(named: "dogstar.png")!)
        print("dog")
        (segue.destination as! DetailViewController).scrollView.addSubview(imgView)
    } else if segue.identifier == "horse" {
        print("horse")
        (segue.destination as! DetailViewController).imgView.image = UIImage(named: "horsestar.png")!
        (segue.destination as! DetailViewController).scrollView.addSubview((segue.destination as! DetailViewController).imgView)
    } else if segue.identifier == "bear" {
        let imageView = UIImageView(image: UIImage(named: "bear.png")!)
        print("bear")
    } else if segue.identifier == "eagle" {
        let imageView = UIImageView(image: UIImage(named: "eagle.png")!)
        print("eagle")
    } else {
        let imageView = UIImageView(image: UIImage(named: "rabbit.png")!)
        print("rabbit")
    }
}

请小心效力 - 工艺(!),因为它会在运行时传播很多错误。如果您不希望代码中的nil值,则用户guard let

在您的代码中:

(segue.destination as! DetailViewController).imgView.image = UIImage(named: "horsestar.png")!

您有两个危险的地方:

  1. segue.destination铸造为DetailViewController。如果是不可能的,请扔"fatal error: unexpectedly found nil while unwrapping an Optional value"
  2. 加载图像,名称为" Horsestar.png"。如果未建立图像,请扔"fatal error: unexpectedly found nil while unwrapping an Optional value"

最好使用guard let(或if let):

guard let destinationViewController = segue.destination as? DetailViewController else {
    print("unable to get destinationViewController")
    return
}
guard let image = UIImage(named: "horsestar.png") else {
    print("unable to load image")
    return
}
destinationViewController.imgView.image = image

else if条件下更改您的代码

else if segue.identifier == "horse" {
    if let toViewController = segue.destination as? DetailViewController {
      toViewController.imgView.image = UIImage(named: "horsestar.png")
     /// your other stuff 
    }
}

仍然不知道您想要什么?

  (segue.destination as! DetailViewController).scrollView.addSubview((segue.destination as! DetailViewController).imgView)

最新更新