如何在同一视图控制器中的常规搜索之间展开搜索?

问题描述 投票:0回答:1

抱歉,标题有点模糊。我仍在学习快速和连续学习,并且有3个名为EarthViewControllerMoonViewControllerJupiterViewController的视图控制器。

这些是有效的segue:

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

但是从MoonViewController -> EarthViewController开始放宽搜索时,在尝试返回“地球”视图时,我在Thread 1: Signal SIGABRT处添加了注释,并不断抛出//ERROR HERE错误。这是到目前为止的布局和代码:

enter image description 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.
    }


}

非常感谢您的帮助!谢谢!

ios swift xcode segue unwind-segue
1个回答
1
投票

[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
© www.soinside.com 2019 - 2024. All rights reserved.