由于某种原因,这为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") }
}
}
}
答案 0 :(得分:1)
我猜问题是let newGridController = segue.destination as? GridViewController
我的想法是你的GridViewController是零。由于您强制在此行if (newGridViewController?.savePhotoWithSlicer)! { print("TRUE") }
中解包newGridViewController,因此代码崩溃。
向我们展示更多代码,为您提供详细说明。
答案 1 :(得分:0)
目标c和Swift很乐意让你“赋值”给nil,这可能就是你在做什么了。只是b / c你将“true”分配给nil,并不意味着你实际上做了任何事情(“true”只是被忽略了)。所以当你强行解开零时,你仍然会崩溃。
答案 2 :(得分:0)
你没有说出异常是什么,但我想这是“意外地发现没有...”,这是由第二行最后一行展开的力量造成的,
我怀疑根本原因是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")
}
}
}
}
}