Сохранить переменную перед тем, как отклонить переход в SWIFT - PullRequest
0 голосов
/ 28 мая 2020

У меня в приложении есть V C (не root V C), и я не буду добавлять туда поля после нажатия кнопки. Добавление работает нормально. Мой var находится в другом быстром файле модели (av = ActualValues ​​()). По умолчанию var равно 0, и каждый раз, когда я отклоняю свой V C, var возвращается к значению 0. Как я могу это исправить? UserDefaults не работает: / Это мой код Фактические значения (посмотрите на количество var):

import Foundation
import Firebase


class ActualValues {

var id = "not changed"
var databaseID = "not changed"
var shift = 1
var product: String?
var target: Int = 0
var issueNumber: String?
var issue: String?
var issueNote: String?
var breakNumber: String?

var customer: String?
var quantity: Int = 0
var teamLeader: String?
var numberOfPeople: String?
var numberOfRejects = "0"
var reasonOfRejects: String?
var endNote: String?
var podType: String = "Not selected"
var typeOfWork = "not specified"
...

And statsV C:

import UIKit

class CurrentStatsViewController: UIViewController {

var av = ActualValues()
var defaultsQuantity = UserDefaults.standard.integer(forKey: "quantity")

@IBOutlet weak var menuButton: MyButton!
@IBOutlet weak var boxButton: MyButton!
@IBOutlet weak var rejectButton: MyButton!

//Labels
@IBOutlet weak var planLabel: UILabel!
@IBOutlet weak var actualLabel: UILabel!
@IBOutlet weak var rejectsLabel: UILabel!
@IBOutlet weak var effLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    menuButton.isEnabled = true
    boxButton.isEnabled = true
    rejectButton.isEnabled = true
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    planLabel.text = "\(av.target)"
    actualLabel.text = "\(av.quantity)"
}

@IBAction func menuButtonTapped(_ sender: MyButton) {
    self.dismiss(animated: true, completion: nil)
}

@IBAction func boxButtonTapped(_ sender: MyButton) {
    addQuantity()
}

@IBAction func rejectsButtonTapped(_ sender: MyButton) {

}

//FUNC
func addQuantity() {
    av.quantity = (av.quantity + 1)
    actualLabel.text = "\(av.quantity)"
    print(av.quantity)
}
}

Как я могу сохранять var каждый раз когда я отклоняю segue и загружаю последний номер, если я возвращаюсь к этому V C?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Я бы также подумал об использовании одноэлементного класса.

1 голос
/ 28 мая 2020

Вы можете использовать UserDefaults для сохранения и загрузки данных. Вот пример для Int:

UserDefaults.standard.set(3, forKey: "myKeyName")

Чтобы загрузить значение, используйте аналогичный метод. Однако обратите внимание, что тип указывается в вызове функции.

UserDefaults.standard.integer(forKey: "myKeyName")

Я бы также рекомендовал использовать структуру для хранения ключей, поскольку это обеспечивает дополнительный уровень безопасности типов.

struct UserDefaultKey {
    static let myInt = "myKeyName"
}

Если вы используете переходы, вы можете использовать следующий метод для обработки любых данных до того, как произойдет переход:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)
    // Save your data here
    UserDefaults.standard.set(3, forKey: UserDefaultKey.myInt)
}
...