Kevin
Kevin

Reputation: 697

How to retrieve data save in Model Class Swift 3

I am trying to retrieve data saved in the Model file from View Controller 2, but I'm getting zeroes. How can I save and retrieve data in Model class from any View Controller in my project?

Model.swift:

class Model {

    var hoursTaken = 0.0
    var currentGPA = 0.0
    //var classArray: [String]

    func saveGPA(GPA: Double) {
        currentGPA = GPA
    }

    func returnGPA() -> Double {
        return currentGPA
    }

    func saveHoursTaken(HoursTaken: Double) {
        hoursTaken = HoursTaken
    }
}

In View Controller 1:

var model = Model()     

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView.tag == 1 {
        let hourstaken = Double(choices[row])
        print(hourstaken!)
        hoursTakenText.text = choices[row]
        model.saveHoursTaken(HoursTaken: hourstaken!)

        //print(model.hoursTaken)
    } 
    else if row < 12 {
        let currentGPA = Double(choices2[row])
        print(currentGPA!)
        model.saveGPA(GPA: currentGPA!)
        GPATextField.text = choices2[row]
    }

    subView.isHidden = true
    subview2.isHidden = true
}

In View Controller 2 prints 0.0:

import Foundation
import UIKit

class ThirdViewController: UIViewController {

    var model = Model()

    @IBAction func testButton(_ sender: UIButton) {
        print("Test Button Pressed")
        let a = model.returnGPA()//prints 0.0
        print(a)    
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    } 
}

Upvotes: 1

Views: 2991

Answers (1)

Anh Pham
Anh Pham

Reputation: 2118

If you want to save and retrieve data in Model class from anywhere. I think you can use static/class keyword before properties and methods in Model class:

class Model {

    static var hoursTaken = 0.0
    static var currentGPA = 0.0

    class func saveGPA(GPA: Double) {
        currentGPA = GPA
    }

    class func returnGPA() -> Double {
        return currentGPA
    }

    class func saveHoursTaken(HoursTaken: Double) {
        hoursTaken = HoursTaken
    }
}

In View Controller 1:

// var model = Model() // Remove this line

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView.tag == 1 {
        let hourstaken = Double(choices[row])
        hoursTakenText.text = choices[row]
        Model.saveHoursTaken(HoursTaken: hourstaken!)

    } else if row < 12 {
        let currentGPA = Double(choices2[row])
        GPATextField.text = choices2[row]
        Model.saveGPA(GPA: currentGPA!)
    }

    subView.isHidden = true
    subview2.isHidden = true
}

In View Controller 2:

// var model = Model() // Remove this line

@IBAction func testButton(_ sender: UIButton) {
    let a = Model.returnGPA()
}

Upvotes: 2

Related Questions