在 UITabbar 中的 VC 之间保留并检索 UserDefaults

Persist and retrieve UserDefaults between VC in a UITabbar

我有一个带有 3 VCs 的 TabBar 应用程序。第一个显示一个 UIPickerView,允许用户 select 三种语言中的一种,标签文本根据所选语言进行翻译。我使用 UserDefaults 坚持选择的语言,没什么大不了的,但是当我输入第二个 VC 时,标签没有翻译。如果我关闭应用程序并重新打开它,则会发生更改,因此所选语言有效地保留并被检索。 我正在使用 Swift 4 和 Xcode 9。 谢谢!

标签栏在加载时实例化所有子视图控制器,因此您的第二个 VC 具有在标签栏加载时设置的语言,而不是您在第一个视图中设置的语言控制器。当您更改语言时,您应该 post 收到通知并在 VC 中收听通知,然后相应地更新 VC 两个。

编辑 NotificationCenter 添加代码:

在设置语言的 VC 中:

NotificationCenter.default.post(name: NSNotification.Name("language changed"), object: self, userInfo: ["language": "en"])

在VC你要更新:

NotificationCenter.default.addObserver(forName: NSNotification.Name("language changed"), object: nil, queue: .main) { notification in
    guard let language = notification.userInfo ["language"] else {
        return
    }
    //Do language stuff here
}