Swift-休息一下,通过数据混乱



我已经尝试以多种方式从我的Undind Segue向后传递数据。看来数据没有被发送或在viewDidload((之后发送,因此我要设置的标签不会更新。Undind Segue正在工作,在下面,我为Segue做准备,并成功地将上一个视图控制器的标题更改为"新标题",但最后一行并未设置Nbarotohome.player.player。

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) {

}

在查看了这个问题之后与Undind Segue传递数据我还尝试在上一个视图控制器

中以这种方式获取数据
 @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
    if let sourceViewController = segue as? BuyStats {
        playerNameLabel.text = sourceViewController.playerName
    }
}

如果我需要为自己想做的事情添加更多详细信息,请询问,我将编辑。我想问一个问题,但我很难制定。

似乎没有发送数据或在查看didload((之后发送,因此我要设置的标签不会更新。

undind segue 中,您正在返回已经创建的viewController,因此viewDidLoad在您遇到另一个viewController之前很久以前发生了。


如果您使用的是segues,则不应与导航controller中的ViewController的数组或调用dismiss一起陷入困境。 Undind Segue 将做所有这些。只需在prepare(for:sender:)中获取 destination 并设置数据:

if segue.identifier == "unwindToViewController1" {
    let nbaRotoHome = segue.destination as! NBARotoHome
    nbaRotoHome.player = "new player name"
}

或在您的prepareForUnwind中获取 source 并读取数据:

在此行中,您缺少.source。更改:

if let sourceViewController = segue as? BuyStats

to:

if let sourceViewController = segue.source as? BuyStats

最新更新