我的大学小项目需要帮助。我有两个ViewController。 首先-DietViewController 第二-WaterBalanceViewController(使用SPStorkController)
我需要在DietVC中填充CircleProgressView。
当我点击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)
}
接下来,当我在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
重置为零。
谢谢!
答案 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