0

First time poster so sorry for the incorrect format/length of the question.

I am building an app in Xcode that allows users to input various inputs among numerous view controllers and then have output in a single view controller with results displayed through labels.

The raw inputted textfield data is stored into UserDefaults and can display them later in the resulting VC with no problem. Im having trouble with calculated outputs (in this example "papiresult") however.

Can anyone provide guidance how to print out the calculated result several view controllers later using UserDefaults?

This is the rough layout

enter image description here

Here is the code I have in the first 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")

    }   
}

Here is the code in the last (result) 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)"}
      }
}
M Reza
  • 18,350
  • 14
  • 66
  • 71

1 Answers1

0

Basically, you should use UserDefaults.standard rather than creating a new instance of UserDefaults class. So I think this code

let userDefaults = UserDefaults()

should be replaced with this:

let userDefaults = UserDefaults.standard
Manabu Nakazawa
  • 1,983
  • 22
  • 23