用户默认值未注册新密钥?



我正在设计一个应用程序(iOS(,我正在尝试使用UserDefaults(Swift 3,Xcode 8.3.3(。我之前添加了一些工作正常的键和值。

但是,当我添加更多键时,旧键仍在工作,但新键不起作用。具体来说,每当我尝试读取新键时,它们都会返回 0。

我已经在谷歌和SO上搜索了很多年,但仍然找不到我出错的地方。

请帮忙!

在应用程序代表中.swift

func applicationDidFinishLaunching(_ application: UIApplication) {
let d = UserDefaults.standard
let defaultValues = ["highScore"  : 0,
"second"     : 0,
"third"      : 0,
"balls"      : 0,
"maxLives"   : 5,
"increaseML" : 250]
d.register(defaults: defaultValues)
}

在 MenuScene 中.swift(自定义类(

var maxLives = defaults.integer(forKey: "maxLives")
var increaseML = defaults.integer(forKey: "increaseML")

出于某种原因,increaseMLmaxLives返回 0,即使我将它们的值分别设置为 250 和 5。

为什么会发生这种情况,我该如何解决这个问题?

我怀疑你的applicationDidFinishLaunching没有被调用。如果您正在使用Storyboards,可能会导致您的Appdelegate未正确连接。

您可以按照此 asnwer 修复它,也可以将默认值的初始化移动到:

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

每次应用程序启动时将调用什么。

此外,Apple 甚至不鼓励您在本文档中使用applicationDidFinishLaunching(_:)

let d = UserDefaults.standard

let defaultValues = ["highScore"  : 0,
"second"     : 0,
"third"      : 0,
"balls"      : 0,
"maxLives"   : 5,
"increaseML" : 250]
d.register(defaults: defaultValues)
d.synchronize()

最新更新