首页 文章

Xcode Swift:如何在每个viewDidLoad之后阻止变量更改,如何保存和更新来自不同ViewControllers的数据?

提问于
浏览
0

我的主VC中有一些变量,当用户单击另一个VC中的按钮时,prepareForSegue会将新值传递给主VC并更新标签 .

但是,当用户再次点击它时,它会回到初始值,所以它不会增加,因为该值是在viewDidLoad中设置的?

MainVC:

var statsHealth:Int = 0

override func viewDidLoad() {
    super.viewDidLoad()

    healthLabel.text = String("Health: \(statsHealth)/10")

}

另一个VC:

override func prepareForSegue(segue:UIStoryboardSegue,sender:AnyObject?){

if (segue.identifier == "startSegue") {

        let startVC = segue.destinationViewController as ViewController

        startVC.statsHealth += 1

    }

它显示为0,然后显示为1,然后再显示0,然后显示1而不是2,3,4等 .

有任何想法吗?

BR

尼尔斯

2 回答

  • 1

    所以根据你的描述,我假设视图控制器结构是这样的:

    AnotherVC - > MainVC

    MainVC呈现在AnotherVC之上 . 当你回到AnotherVC时,你是否完全解雇了MainVC?如果是这样,那么每次从AnotherVC转到MainVC时,它都会启动一个新的ViewController,之前保存的变量不再存在 .

    如果要在MainVC中保留此结构并更改变量,请在AnotherVC中保留mainVC的引用 . 然后,您可能希望以编程方式呈现它,而不是在故事板中连接 .

    class AnotherVC {
        var mainVC: MainVC?
    
        func presentMainVC() {
             var targetVC = UIViewController()
             if self.mainVC != nil {
                 targetVC = self.mainVC
    
             } else {
                 let storyboard = UIStoryboard(name: "Your-storyboard-name", bundle: nil)
                 targetVC: MainVC = storyboard.instantiateViewControllerWithIdentifier("The-main-VC-identifier") as MainVC
                 self.mainVC = targetVC
             }
    
             //you can change your variable here
             mainVC.statsHealth += 1
    
             self.presentViewController(self.mainVC, animated: true, completion: nil)
        }
    

    如果你的mainVC在任何情况下都在AnotherVC之上,你可以恢复参考方向 .

  • 1

    也许不是最“快捷”的方式,但肯定运作良好....

    创建一个名为Variables.swift的文件,该文件将保存所有“通用”变量(如果这些变量将存在于每个页面上,我认为没有理由这不是'最好'的方法 - 当然这是最简单的要明白!)

    在Variables.swift中,保存所有通用变量

    struct Variables {
        static var statsHealth = 0
    .....
    }
    

    然后,在每个其他页面中,随时访问它们

    healthLabel.text = String("Health: \(Variables.statsHealth)/10")
    

    或设置它们

    Variables.statsHealth += 1
    

相关问题