如何从持久性中检索填充的TextField

时间:2018-10-19 10:51:45

标签: ios swift

在加载带有文本字段和操作按钮的secondViewController时出现错误,因此用户可以用一些数字填充它并将其保存到UserDefaults

想法是能够返回secondVC,并在其中显示TextField的值与用户最初输入的值相同

enter image description here

class MainViewController: UIViewController {

    @IBOutlet weak var A3TextField: UITextField!

    @IBAction func calc(_ sender: Any) {
        let A3 = Cell(name: "A3", sheet: "", value: Double(A3TextField.text!)!)
        print(A3)

        Cell.saveCellsUserDefaults(cells: [A3], forKey: "main")
    }

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

class SecondViewController: UIViewController {

    @IBOutlet weak var B3TextField: UITextField!

    @IBAction func calc2(_ sender: Any) {
        let B3 = Cell(name: "B3", sheet: "", value: Double(B3TextField.text!)!)
        print(B3)

        // persist
        Cell.saveCellsUserDefaults(cells: [B3], forKey: "second")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // retrieve from persists and draw in TextField

        let cellB3FromUD = Cell.getCellsUserDefaults(forKey: "second")
        print("---> cellB3FromUD \(cellB3FromUD[0].value)")
        B3TextField.text = "\(cellB3FromUD[0].value)"
    }
}

struct Cell: Codable {

    var name: String = ""
    var sheet: String = ""
    var value: Double = 0

    init(name: String, sheet: String, value: Double) {
        self.name = name
        self.sheet = sheet
        self.value = value
    }

    static func saveCellsUserDefaults(cells: [Cell], forKey: String)  {
        let encoder = JSONEncoder()
        if let encoded = try? encoder.encode(cells) {
            let defaults = UserDefaults.standard
            defaults.set(encoded, forKey: forKey)
        }
    }

    static func getCellsUserDefaults(forKey: String)-> [Cell] {
        var cells = [Cell]()
        let decoder = JSONDecoder()
        if let cellData = UserDefaults.standard.data(forKey: forKey) {
            if let cellX = try? decoder.decode([Cell].self, from: cellData) {
                cells = cellX
                return cellX
            }
        }
        return cells
    }
}

0 个答案:

没有答案