我有一个代码,以便在运行时,如果在上启用了,则会显示指定的 VC 。
但没有任何反应,在重新启动后,开关会不保存其值。
PLS帮助
SettingsVC.swift
@IBAction func switchChanged(_ sender: UISwitch) {
UserDefaults.standard.set(sender.isOn, forKey: "isSwitchOn")
}
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let isSwitchOn = UserDefaults.standard.bool(forKey: "isSwitchOn")
if isSwitchOn {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let VC2 = storyboard.instantiateViewController(withIdentifier: "ViewController")
self.window!.rootViewController = VC2;
}
// Override point for customization after application launch.
return true
}
修改
override func viewDidLoad() {
super.viewDidLoad()
Set.isOn = UserDefaults.standard.bool(forKey: "isSwitchOn")
// Do any additional setup after loading the view.
}
答案 0 :(得分:1)
我在这里注意到两件事:
每当您以编程方式调整窗口的根视图控制器时,需要调用window?.makeKeyAndVisible
来显示新屏幕。
目前,您的代码不保证在重新启动之间保存用户默认值。 UserDefaults
会选择自己的时间将数据保存到磁盘上,如果在此之前退出应用程序,则无法及时保存。
我相信在模拟器上,如果你停止通过Xcode运行模拟器,这种情况总会发生。由于这是非常重要的行为,您可能需要调用UserDefaults.standard.synchronize
强制保存。
请注意,此通话通常会在特定时间间隔内自动完成;你明确地这样做是因为你不能错过它。