swift - 如何将计算结果存储在 UserDefaults 中以显示在 "results" View Controller 中

标签 swift viewcontroller

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

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

原始输入的文本字段数据存储在 UserDefaults 中,稍后可以在生成的 VC 中显示它们,没有任何问题。然而,我在计算输出时遇到了问题(在本例中为“papiresult”)。

任何人都可以提供指导如何使用 UserDefaults 稍后打印多个 View Controller 的计算结果吗?

这是大致的布局

enter image description here

这是我在第一个 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")

    }   
}

这是最后一个(结果) View Controller 中的代码:

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 而不是创建 UserDefaults 类的新实例。所以我认为这段代码

let userDefaults = UserDefaults()

应替换为:

let userDefaults = UserDefaults.standard

关于swift - 如何将计算结果存储在 UserDefaults 中以显示在 "results" View Controller 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54328420/

相关文章:

ios - 如何向 Root View 而不是 TopLayoutGuide 添加约束?

ios - 如何在不重新加载整个 TableView 的情况下更新自定义节标题?

objective-c - 通过 instantiateViewControllerWithIdentifier 将代码与 Storyboard 中的 View Controller 结合起来

ios - 与 UIScrollView 结合使用时 UIPageControl 不可见

ios - Swift UIView 自定义 View 在 ViewController 操作后不会更新

ios - 如何根据基本 View 中的操作刷新其他 View Controller

swift - 如何使用 Swift 将以下数据获取到 tableview 中?

ios - 在 UIWebView 中渲染二进制 ms/doc 为空

swift - 在 tableview 中显示两个可重用的单元格 - Swift 3

ios - 在 UITabcontroller 中转到 3 选项卡不起作用