gpt4 book ai didi

ios - Swift - 如果尚未设置,则设置 UserDefault

转载 作者:行者123 更新时间:2023-11-29 05:49:58 24 4
gpt4 key购买 nike

我的目的是为每个用户仅显示一次我的InitialViewController

didFinishLaunchingWithOptions 内部的代码应该在启动时检查 UserDefaults 键 firstTime 的值是否仍然为 true。
如果没有,则不会显示InitialViewController。如果为 true 并且正在显示 VC,则其按钮(请参阅下面的第二个代码)应将 firstTime 设置为 false,以防止下次启动应用程序时显示 InitialViewController

我认为我找到了问题所在,即:didFinishLaunchingWithOptions内部的defaults.set(true, forKey: "firstTime"):
每次应用程序时启动时,它忽略了该键在之前的启动中可能已设置为 false 的事实,因为无论如何它都会将其设置为 true。
一个可能的解决方案可能是检查 firstTime 是否已设置,如果是,则不会再次设置 firstTime但我还没有找到可能的方法。这就是我需要你帮助的地方
删除它也没有帮助,因为当应用程序第一次启动时,它需要这个 key 存在并且为true 首先显示 InitialViewController

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

if let rvc = self.window?.rootViewController {

let defaults = UserDefaults.standard
defaults.set(true, forKey: "firstTime")

if defaults.bool(forKey: "firstTime") == true {
let vc = rvc.storyboard!.instantiateViewController(withIdentifier: "InitialViewController")
self.window!.rootViewController = vc
}
}
return true
}
@IBAction func buttonStart(_ sender: UIButton) {
if (nameInput.text != "" && startKmInput.text != "") {

let defaults = UserDefaults.standard
defaults.set(false, forKey: "firstTime")

performSegue(withIdentifier: "goToSecond", sender: self)
}
}

最佳答案

好吧,您可以反转逻辑并检查初始操作是否发生,因此您不需要在应用程序启动时设置值。例如:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

if let rvc = self.window?.rootViewController {

let defaults = UserDefaults.standard

if !defaults.bool(forKey: "buttonStartPressed") {
let vc = rvc.storyboard!.instantiateViewController(withIdentifier: "InitialViewController")
self.window!.rootViewController = vc
}
}
return true
}

然后:

@IBAction func buttonStart(_ sender: UIButton) {
if (nameInput.text != "" && startKmInput.text != "") {

let defaults = UserDefaults.standard
defaults.set(true, forKey: "buttonStartPressed")

performSegue(withIdentifier: "goToSecond", sender: self)
}
}

关于ios - Swift - 如果尚未设置,则设置 UserDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55768413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com