在视图控制器之间传递数据无法正常工作
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 之间传递数据