Я пытаюсь сделать что-то похожее на то, что вы делаете. Я перевожу приложение на другие языки (локализация). Поэтому, когда я выбираю один язык на VC2, я возвращаюсь к VC1, и строки в VC1 должны обновляться в соответствии с выбранным языком.
Язык сохраняется в Userdefaults ().
Я думаю, я знаю, почему у вас возникла эта проблема. Чтобы понять, что происходит, попробуйте написать это в VC1:
let count = UserDefaults.standard.string(forKey: "cartsItems") // I suppose this is a global variable.
override func viewWillAppear(_ animated: Bool) {
print("This is the value of the global variable: \(count)")
print("This is the value of Userdefaults directly: \(UserDefaults.standard.string(forKey: "cartsItems"))")
}
Вы ожидаете, что оба результата будут одинаковыми. Однако первый из глобальной переменной не будет обновлен; тогда как второй, напрямую использующий Userdefaults, обновляется.
Я полагаю, это потому, что когда вы загружаете VC1, представление загружается и переменные получают свои значения. Когда вы открываете VC2, он открывается над VC1. Когда вы возвращаетесь в VC1, вы не загружаете его снова, а возвращаетесь к тому, что уже загружено. И глобальная переменная остается с тем же значением, что и в начале.
Надеюсь, это поможет.