如何将计算结果存储在 UserDefaults 中以显示在“结果”视图控制器中 [重复]

Posted

技术标签:

【中文标题】如何将计算结果存储在 UserDefaults 中以显示在“结果”视图控制器中 [重复]【英文标题】:How do I store a calculated result in UserDefaults to display in a "results" View controller [duplicate] 【发布时间】:2019-01-23 13:29:55 【问题描述】:

第一次发帖,很抱歉问题的格式/长度不正确。

我正在 Xcode 中构建一个应用程序,它允许用户在众多视图控制器中输入各种输入,然后在单个视图控制器中输出,结果通过标签显示。

原始输入的文本字段数据存储在 UserDefaults 中,以后可以在生成的 VC 中毫无问题地显示它们。但是,我在计算输出时遇到了问题(在本例中为“papiresult”)。

谁能提供指导如何在以后使用 UserDefaults 打印出几个视图控制器的计算结果?

这是粗略的布局

这是我在第一个 ViewController 中的代码:

import UIKit

let userDefaults = UserDefaults()
var papiresult = Double()


class ViewController1: UIViewController, UITextFieldDelegate 

    @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var textField2: UITextField!
    @IBOutlet weak var textField3: UITextField!

    override func viewDidLoad() 
        super.viewDidLoad()
        textField1.delegate = self
        textField2.delegate = self
        textField3.delegate = self
    

   //Declaring data input into UserDefaults//
    @IBAction func sendDataToVC2(_ sender: Any) 


        let systPA = Double(textField1.text!)
        let diastPA = Double(textField2.text!)
        let cvPressure = Double(textField3.text!)
        papiresult = ((systPA!-diastPA!)/cvPressure!)

        userDefaults.set(textField1.text, forKey: "PASP")
        userDefaults.set(textField2.text, forKey: "PADP")
        userDefaults.set(textField3.text, forKey: "CVP")
        userDefaults.set(papiresult, forKey: "PAPI")

       

这是最后一个(结果)视图控制器中的代码:

import UIKit


class ViewController3: UIViewController 

    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var label4: UILabel!
    @IBOutlet weak var label5: UILabel!

    override func viewDidLoad() 
        super.viewDidLoad()


//Recalling data from UserDefaults// 

override func viewWillAppear(_ animated: Bool) 

  if let data1 = userDefaults.object(forKey: "PASP") 
  if let message1 = data1 as? String 
      self.label1.text = message1
      
  if let data2 = userDefaults.object(forKey: "PADP") 
  if let message2 = data2 as? String 
      self.label2.text = message2
      
  if let data3 = userDefaults.object(forKey: "CVP") 
  if let message3 = data3 as? String 
      self.label3.text = message3
      
  if let data4 = userDefaults.object(forKey: "Age") 
  if let message4 = data4 as? String 
      self.label4.text = message4
      
  if let data5 = userDefaults.object(forKey: "PAPI") 
  if let message5 = data5 as? Double 
  self.label5.text = "\(message5)"
      

【问题讨论】:

UserDefaults.standard.set(, forKey: ) - 设置值 UserDefaults.standard.string(forKey: ) - 获取字符串值 【参考方案1】:

基本上,您应该使用UserDefaults.standard 而不是创建UserDefaults 类的新实例。所以我认为这段代码

让 userDefaults = UserDefaults()

应该替换为:

let userDefaults = UserDefaults.standard

【讨论】:

以上是关于如何将计算结果存储在 UserDefaults 中以显示在“结果”视图控制器中 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

UserDefaults 存储数组中的按钮选择

如何将 UIView 存储在 CoreData 或 UserDefaults 中

如何将 [String: UIImage] 类型的字典存储到 CoreData/UserDefaults 中?

将字典保存到 UserDefaults

检测存储在 UserDefaults 中的数组中的项目

如何在 UserDefaults 中存储自定义对象?