首页 > 解决方案 > 如何将 json 响应从一个视图控制器传递到另一个故事板中的另一个视图控制器

问题描述

如何将我从 api 收到的 json 响应传递给不同故事板中的另一个视图控制器?

我尝试使用 segues 但似乎不起作用

let propass = UIStoryboard(name: "ProfileStoryboard", bundle: Bundle.main).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
propass.proDict2 = parseJSON2

标签: iosswiftxcode

解决方案


如果您通过情节提要设置转场,那么当您尝试上面的代码时,它无法通过转场工作是有道理的。问题是,当您设置故事板转场时,该应用程序处理创建一个新 VC 并从您的原始 VC 呈现/显示它。

您在代码中所做的是,您正在实例化同一视图控制器的新版本,这不是正在显示/呈现的视图控制器。

您有两种方法来实现这一点,首先是通过在 ViewController 中覆盖 prepareForSegue 来显示/呈现您的 propass View Controller:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "YOUR SEGUE IDENTIFIER FROM THE STORYBOARD" {
        let propassVC = segue.destination as! ProfileViewController
        propassVC.proDict = parseJSON2
    }
}

实现这一点的另一种方法是删除您在情节提要中设置的转场。然后你像你一样初始化 Propass VC 并将数据传递给它。

    let propassStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let propassVC = propassStoryboard.instantiateViewController(withIdentifier: "PROPASS IDENTIFIER SET IN STORYBOARD") as ProfileViewController

    propassVC.jsonDict = JSONParse2
    show(propassVC, sender: nil)

推荐阅读