填充CirleProgressView并将结果保存到UserDefaults

时间:2019-05-26 21:27:03

标签: swift xcode nsuserdefaults userdefaults

我的大学小项目需要帮助。我有两个ViewController。 首先-DietViewController 第二-WaterBalanceViewController(使用SPStorkController)

我需要在DietVC中填充CircleProgressView。 DietVC

当我点击Drink->

 @IBAction func drinkAction(_ sender: UIButton) {

        let controller = WaterBalanceViewController()
        let transitionDelegate = SPStorkTransitioningDelegate()
        controller.transitioningDelegate = transitionDelegate
        controller.modalPresentationStyle = .custom
        transitionDelegate.customHeight = 620
        transitionDelegate.showIndicator = false
        self.present(controller, animated: true, completion: nil)
    }

然后打开SPStorkController-我的第二个VC secondVC

接下来,当我在secondVC中单击按钮Drink时,我必须保存:我喝了多少酒。例如,调用此变量justDrunk。在我的第一个VC中,我有var currentAmountOfWater = Float(),这是将传递给CircleProgressView的值。我尝试保存:

@objc func pressButton(_ sender: UIButton){
        print("Hello")

        self.justDrunk = Float(textField.text!)!
        let vc = DietViewController()
        vc.currentAmountOfWater += justDrunk
        vc.currentAmountOfWater += justDrunk
       UserDefaults.standard.set(vc.currentAmountOfWater, forKey: "currentAmountOfWater")

        print(UserDefaults.standard.float(forKey: "currentAmountOfWater"))



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


    }

当我尝试打印时,我看到我的值没有保存。始终打印justDrunk的结果。

然后我想在我的firstVC中使用我的currentAmountOfWater

在viewDidLoad中,`var valueForWater = currentAmountOfWater / maxAmountOfWater

waterProgress.progressColor = UIColor(red: 0, green: 122/255, blue: 1, alpha: 1)
       waterProgress.setProgressWithAnimation(duration: 1, value: valueForWater)

请,有人帮助我。如何在secondVC中输入数据,如何将数据传递给firsVC并在CicrleProgressView中全部显示。也许您可以编写一个代码,每24小时将currentAmountOfWater重置为零。

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您要立即检索存储中的值,因此必须执行UserDefaults.standard.synchronize(),以便将更改立即写入磁盘< / strong>

这是您更新的方法

@objc func pressButton(_ sender: UIButton){
    guard let justDrunk = Float(textField.text!) else { return }

    self.justDrunk = justDrunk

    let vc = DietViewController()
    vc.currentAmountOfWater += justDrunk
    vc.currentAmountOfWater += justDrunk
    UserDefaults.standard.set(vc.currentAmountOfWater, forKey: "currentAmountOfWater")
    UserDefaults.standard.synchronize()

    print(UserDefaults.standard.float(forKey: "currentAmountOfWater"))

    self.dismiss(animated: true, completion: nil)
}

请注意,请勿强行解开Float(String),用户可能会输入非数字字符串,这可能会导致应用程序崩溃。

我更喜欢调用委托方法来更新视图控制器,这在another post中已作了简要说明,您也可以看看sample project