抱歉,标题有点模糊。我仍在学习快速和连续学习,并且有3个名为EarthViewController
,MoonViewController
和JupiterViewController
的视图控制器。
这些是有效的segue:
EarthViewController -> MoonViewController
MoonViewController -> JupiterViewController
JupiterViewController -> MoonViewController,
and even JupiterViewController -> EarthViewController,
但是从MoonViewController -> EarthViewController
开始放宽搜索时,在尝试返回“地球”视图时,我在Thread 1: Signal SIGABRT
处添加了注释,并不断抛出//ERROR HERE
错误。这是到目前为止的布局和代码:
EarthViewController(ViewController)
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let des = segue.destination as! MoonViewController
if (segue.identifier == "toMoonView")
{
print("Went to the moon")
}
}
@IBAction func backFromMoon(segue: UIStoryboardSegue){
if let scVC = segue.source as? MoonViewController
{
print ("Back from the Moon to Earth")
}
}
@IBAction func backFromJupiterToEarth(segue: UIStoryboardSegue){
if let scVC = segue.source as? JupiterViewController
{
print ("Back from Jupiter to Earth")
}
}
}
MoonViewController
import UIKit
class MoonViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
//------------------------------------------------------------------------
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let des = segue.destination as! JupiterViewController //<- ERROR HERE
if (segue.identifier == "toJupiterView")
{
print("Went to Jupiter")
}
}
//-----------------------------------------------------------------------
@IBAction func backFromJupiter(segue: UIStoryboardSegue){
if let scVC = segue.source as? JupiterViewController
{
print ("Back from Jupiter to the Moon")
}
}
}
JupiterViewController(尚未添加)
import UIKit
class JupiterViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
非常感谢您的帮助!谢谢!
[C0中的此功能:
MoonViewController
既称为常规segue,也涉及放松segue。当您选择override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let des = segue.destination as! JupiterViewController //<- ERROR HERE
if (segue.identifier == "toJupiterView")
{
print("Went to Jupiter")
}
}
时,JupiterViewController
的类型确实为segue.destination
。但是当您放松到JupiterViewController
时,ViewController
的类型为segue.destination
。
在第二种情况下,强制类型ViewController
由于类型错误而崩溃。
一种解决方法是,在确定目标位置后,将as! JupiterViewController
的声明移到des
的内部:
if