Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-展开分段传递数据混淆_Swift_Segue_Prepare_Unwind Segue - Fatal编程技术网

Swift-展开分段传递数据混淆

Swift-展开分段传递数据混淆,swift,segue,prepare,unwind-segue,Swift,Segue,Prepare,Unwind Segue,我已经尝试过从我的放松序列以多种方式向后传递数据。看起来数据没有被发送,或者在viewDidLoad()之后被发送,所以我试图设置的标签没有得到更新。解卷segue正在工作,下面我使用prepare for segue成功地将上一个视图控制器的标题更改为“new title”,但最后一行没有将nbaRotoHome.player设置为“new player name” override func prepare(for segue: UIStoryboardSegue, sender: Any?

我已经尝试过从我的放松序列以多种方式向后传递数据。看起来数据没有被发送,或者在viewDidLoad()之后被发送,所以我试图设置的标签没有得到更新。解卷segue正在工作,下面我使用prepare for segue成功地将上一个视图控制器的标题更改为“new title”,但最后一行没有将nbaRotoHome.player设置为“new player name”

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

    if segue.identifier == "BuyStatsTapPager" {
        let nav = segue.destination as! UINavigationController


        let buyStatsTapPager = nav.viewControllers[0] as! BuyStatsTabPager
            buyStatsTapPager.selectedPlayerBuyStats = selectedPlayer
            buyStatsTapPager.buyStatsRef = self

    }

    if segue.identifier == "unwindToViewController1" {

        var viewControllers: [UIViewController] = mainNavigationController.viewControllers as [UIViewController];

        if(viewControllers.count == 3){
            viewControllers.remove(at: viewControllers.count-2)
            mainNavigationController?.viewControllers = viewControllers
        }

        let enteredContestViewController = viewControllers[viewControllers.count-1]
        enteredContestViewController.title = "new title"

        self.presentingViewController?.dismiss(animated: true, completion: nil)

        let nbaRotoHome = segue.destination as! NBARotoHome

        nbaRotoHome.player = "new player name"


    }
回到我以前的视图控制器,我有

@IBAction func prepareForUnwind(segue: UIStoryboardSegue) {


}
看了这个问题, 在上一个视图控制器中,我也尝试过以这种方式获取数据

 @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
    if let sourceViewController = segue as? BuyStats {
        playerNameLabel.text = sourceViewController.playerName
    }
}
如果我需要添加更多的细节,我想做什么,请询问,我会编辑。我想问这个问题,但我在表达上有困难

看起来数据没有被发送,或者在viewDidLoad()之后被发送,所以我试图设置的标签没有得到更新

在展开序列中,您将返回到已创建的
viewController
,因此
viewDidLoad
发生在您切换到另一个
viewController
之前很久


如果您使用的是segues,则不应在navigationController中使用ViewController数组,也不应调用
Disclease
。放松阶段将完成所有这些。只需在
准备(发件人:)
中获取目的地并设置数据:

if segue.identifier == "unwindToViewController1" {

    let nbaRotoHome = segue.destination as! NBARotoHome

    nbaRotoHome.player = "new player name"
}
或者在
prepareForUnwind
中获取源代码并读取数据:

if segue.identifier == "unwindToViewController1" {

    let nbaRotoHome = segue.destination as! NBARotoHome

    nbaRotoHome.player = "new player name"
}
这一行缺少
.source
。更改:

if let sourceViewController = segue as? BuyStats
致:


谢谢你的回复。然而,我仍然有困难。如果已经调用viewDidLoad(),那么如何使用新数据更新它?假设我已经在viewDidLoad()中设置了一个标签,现在我想在展开时更改它。是否还需要做其他事情(比如再次调用viewDidLoad()),或者重新分配变量就是您需要做的全部工作?我试过了,但没有任何运气。将更新标签的代码放入自己的方法中。从viewDidLoad()和您称为prepareForUnwind的展开着陆点调用该方法。