gpt4 book ai didi

ios - 如何让 unwind segue 在同一 View Controller 中与常规 segue 一起工作?

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

如果标题有点含糊,请见谅。我仍在学习 swift 和 segues,我有 3 个 View Controller ,分别称为 EarthViewControllerMoonViewControllerJupiterViewController

这些是有效的 segues:

EarthViewController -> MoonViewController
MoonViewController -> JupiterViewController
JupiterViewController -> MoonViewController,
and even JupiterViewController -> EarthViewController,

但是 MoonViewController -> EarthViewController 的 unwind segue 不断抛出一个 Thread 1: Signal SIGABRT 错误,我已经评论了 //ERROR HERE当试图回到地球 View 时。这是到目前为止的布局和代码:

enter image description here

地球 View Controller (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")
}
}
}

月亮 View Controller

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


}

非常感谢任何帮助!谢谢!

最佳答案

MoonViewController 中的这个函数:

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.destinationViewController 类型。

在第二种情况下,强制将 转换为! JupiterViewController 崩溃,因为类型错误。

解决这个问题的一种方法是在确定目标后将 des 的声明移动到 if 中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toJupiterView"
{
let des = segue.destination as! JupiterViewController
print("Went to Jupiter")
}
}

关于ios - 如何让 unwind segue 在同一 View Controller 中与常规 segue 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151082/

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