在视图控制器之间传递数据无法正常工作

Posted

技术标签:

【中文标题】在视图控制器之间传递数据无法正常工作【英文标题】:Pass data between view controllers is not working correctly 【发布时间】:2020-06-03 16:43:25 【问题描述】:

希望大家度过愉快的一天并保持安全!我正在尝试在两个视图控制器之间传递数据,但似乎没有任何变化。这是我的第一个视图控制器:

import UIKit

class AddFoodViewController: UIViewController 

    @IBOutlet weak var foodTextField: UITextField!
    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        if (segue.identifier == "toTableViewController") 
            print("hello world")
            let destinationViewController = TableViewController()
            destinationViewController.food.append(foodTextField.text!)
            let homeViewController = storyboard?.instantiateViewController(identifier: "TableViewController") as? TableViewController

            view.window?.rootViewController = homeViewController
        
    


在第二个视图控制器中,数组 food 似乎根本没有改变,当我打印它时它仍然是空的。任何帮助将不胜感激!

【问题讨论】:

您创建了destinationViewController,但后来使用了homeViewController。我猜你不需要创建destinationViewController 的那一行。附加应该应用于 homeViewController 【参考方案1】:

您似乎正在创建 destinationViewController 并将 food 附加到它,但您没有使用它。您需要在实例化 TableViewController 后附加 food,方法如下:

var food = [String]()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if (segue.identifier == "toTableViewController") 
        let homeViewController = storyboard?.instantiateViewController(identifier: "TableViewController") as? TableViewController
        food.append(foodTextField.text!)
        homeViewController.food = food
        view.window?.rootViewController = homeViewController
    

【讨论】:

嗨弗兰肯斯坦,这在某种程度上有效,因为它只是不断替换原始值。例如,如果我添加了苹果,那么数组将变为 ["Apple"],然后如果我添加梨,则数组将变为 ["Pear"] 而不是 ["Pear, Apple"]。 每次执行 segue 时,您都在创建一个新的 VC,其中包含空的食物。您需要在函数之外保留一系列食物,并在附加到本地食物后设置 vc.foods = foods。 我真的不明白,我怎样才能把这些食物放在课外? 嗨,弗兰肯斯坦,这不起作用...我得到了同样的结果,你能帮帮我吗? 现在可以传数据成功了吗?如果是这样,请关闭此问题并询问另一个关于在控制器之间附加数据的问题。

以上是关于在视图控制器之间传递数据无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

无法在表视图和另一个视图控制器之间传递数据

如何在 PageViewController 和 ViewController 之间传递数据?

无法在 View Controller 和 Model 之间传递数据

快速在标签查看的控制器之间传递数据?

在视图控制器之间传递NSString中的数据 - 目标C [重复]

使用导航栏按钮项和核心数据在视图控制器之间传递日期