由于某些原因,这将为segue准备代码崩溃,因为newGridViewController为nil。有什么想法吗?

override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
  if segue.identifier == "Grid" {
    if let newGridViewController = segue.destination as? GridViewController
      if savePhotoWithSlicer.isOn {
      newGridViewController?.savePhotoWithSlicer = true
      if (newGridViewController?.savePhotoWithSlicer)! { print("TRUE") }
    }
  }
}

最佳答案

你没说例外是什么,但我想是“意外地发现了零…”由第二行的力展开引起的,
我怀疑根本原因是条件下转换到GridViewController失败,所以newGridViewController实际上为零。由于在除最后一行之外的所有地方都使用条件展开,因此在该点之前不会发生崩溃。
更好的结构是使用if let...条件下推:

if let newGridViewController = segue.destination as? GridViewController {
    newGridViewController.savePhotoWithSlicer = savePhotoWithSlicer.isOn
    if newGridViewController.savePhotoWithSlicer {
        print("TRUE")
    }
}

这将防止崩溃,但它可能仍然不会打印“TRUE”,因为我强烈怀疑segue.destination不是一个GridViewController-您需要检查您的故事板,并确保您有适合您的场景的自定义类。
更新
既然您现在已经说明segue会导致嵌入GridViewController的导航控制器,那么您可以使用它来获得所需的视图控制器:
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    if segue.identifier == "Grid" {
        if let navController = segue.destination as? UINavigationController {
            if let newGridViewController = navController.viewControllers.first as? GridViewController {
                newGridViewController.savePhotoWithSlicer = savePhotoWithSlicer.isOn
                if newGridViewController.savePhotoWithSlicer {
                    print("TRUE")
                }
            }
        }
    }
}

关于ios - 无法分配ViewController的Bool成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48431860/

10-11 00:09