unwind segue Xcode 10 swift 导航控制器不工作

unwind segue Xcode 10 swift with navigation controller not working

我已经在互联网上寻找答案并按照苹果文档中的步骤进行操作,但无济于事。 我有两个视图控制器。一个包含收藏夹列表 (FavouriteTableViewController),另一个包含添加到收藏夹列表的项目的详细信息 (ExplorationDetailViewController)。

我在 ExplorationDetailViewController 的导航栏(来自导航控制器场景)上有一个保存按钮,我想单击该按钮以启动展开转场。我已经执行了以下步骤,但是当我点击保存按钮时,它完全没有反应。我包括了与放松最相关的代码。

我在 ExplorationResultViewController 中创建了 prepareforsegue 函数,我将从那里将图像数据和标签传递给另一个 ViewController 作为展开序列的一部分

class ExplorationResultViewController: UIViewController {
    var exploration_result: Favourites?
    @IBOutlet weak var ExplorationLabel: UILabel!
    @IBOutlet weak var ExplorationPhoto: UIImageView!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        // Pass the selected object to the new view controller.
        super.prepare(for: segue, sender: sender)


        let photo = ExplorationPhoto.image
        let name = ExplorationLabel.text ?? ""

        exploration_result = Favourites(name: name, photo: photo)
    }

然后在 FavouriteTableViewController 中,我添加了一个 unwindtoHere 方法,该方法将图像和标签添加到列表中。

class FavouritesTableViewController: UITableViewController {

    // MARK: Properties
    var favourites = [Favourites]()

    // MARK: Actions
    @IBAction func unwindToFavouriteList(sender: UIStoryboardSegue) {
        if let sourceViewController = sender.source as? ExplorationResultViewController, let favourite = sourceViewController.exploration_result{
            // Add a new meal.
            let newIndexPath = IndexPath(row: favourites.count, section: 0)
            favourites.append(favourite)
            tableView.insertRows(at: [newIndexPath], with: .automatic)

        }

然后进入我的故事板,我控制并拖动 ExplorationDetailViewController 中的保存按钮,并将其连接到场景顶部的出口项。我的展开方法在弹出窗口中显示为:'unwindToFavouriteListWithSender'。我select这个。

我现在应该可以走了,但是当我 运行 模拟器并单击“保存”按钮时,它完全没有反应。参见 StoryBoard Design 请帮忙

根据您的评论,我猜测问题是在按下“保存”按钮时视图控制器层次结构中没有 FavouritesTableViewController。你不能放松已经不存在的东西:"unwind"意味着返回较早 实例化并保持存在的东西,在视图控制器层次结构中的当前视图控制器之上。

例如,假设我们有

UINavigationController -> (root view controller) -> FavouritesTableViewController
    -> (push) ExplorationResultViewController

现在我们可以从探索控制器展开到收藏夹控制器,因为收藏夹控制器已经在探索控制器之前的层次结构中。听起来您可能 欣赏这个事实。