将数据发送到另一个 ViewController 的 Swift 问题

Posted

技术标签:

【中文标题】将数据发送到另一个 ViewController 的 Swift 问题【英文标题】:Swift problem with sending data to another ViewController 【发布时间】:2020-02-07 16:53:09 【问题描述】:

第二个 ViewController 中的变量 cards 应该在 buttonClick 上的第一个 VC 中更新。 我用打印数据测试了第一个 VC 的发送数据,效果很好。 代码如下:

@IBAction func btnTapped(_ sender: Any) 
    let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
    let secondVC = (mainStoryboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController)
    for card in setsOfCardsByLevel 
        cardVC.cards.append(card)
    
    print("Number of cards to send - \(cardVC.secondVC.count)") //PRINTS RIGHT NUMBER
    presentVC("SecondViewController") //WORKS FINE

也许你不需要下面这个方法,但我会把它放在以防万一:

func presentVC(_ VC_Name: String) 
    guard let myVC = self.storyboard?.instantiateViewController(withIdentifier: VC_Name) else  return 
    let navController = UINavigationController(rootViewController: myVC)
    navController.modalPresentationStyle = .fullScreen
    self.navigationController?.present(navController, animated: true, completion: nil)

问题:当我在 secondViewController 中打印 cards 时,它们是空的(count = 0)。如何? 编辑: 在等待 *** 上的答案时,我将 presentViewController 更改为 pushViewController 并在 secondVC 中打印显示正确的数字。我很困惑。

【问题讨论】:

【参考方案1】:

您的问题出在您的 presentVC 方法中。首先在您的btnTapped 方法中实例化您的第二个viewController 并分配您的卡片,再次在您的presentVC 方法中实例化另一个控制器,它与您在btnTapped 中定义的第一个控制器和未分配的卡片变量无关。对于解决方案,您可以将您的 secondVC 作为参数传递给您的 presentVC,而不是故事板的名称

【讨论】:

以上是关于将数据发送到另一个 ViewController 的 Swift 问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 使用 xib 中的 tabBarController 将数据从一个 viewController 传递到另一个 viewController

将数据从 tableviewcell 传递到另一个 viewcontroller

swift 将数据从ViewController传递到另一个

教程/示例:如何将数据从 ViewController 传递到另一个 XCODE [关闭]

将数据从一个 ViewController 中的 UITextField 传递到另一个 View Controller 中的 UILabel

将数据从 viewcontroller tableview 传递到另一个视图控制器