2017-08-12 65 views
1

我正在设计一个应用程序(iOS),我试图使用UserDefaults(Swift 3,Xcode 8.3.3)。我以前添加了一些键和值工作正常。用户默认值不注册新密钥?

但是,当我添加了更多的按键时,旧的按键仍在工作,但新按键不起作用。特别是,每当我试图阅读它们时,新密钥都返回0。

我已经搜索了谷歌和SO的年龄,仍然无法找到我要去哪里错了。

请帮忙!

在AppDelegate.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。

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

+0

你肯定没有被默认保存这些键? –

+0

除'maxLives'和'increaseML'之外的所有内容都保存为默认值。所有其他人工作正常。 – Adi219

+0

根据关于'applicationDidFinishLaunching(_ :)'的苹果文档,不应该使用该方法。改为使用 'application(_:didFinishLaunchingWithOptions:)'。 – paper1111

回答

1

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

您可以修复它下面这个asnwer或移动您的默认值的初始化到:

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

什么都会被调用的应用程序启动时间。

此外,苹果甚至不鼓励您在this documentation中使用applicationDidFinishLaunching(_:)

+0

请告诉我,如果我错了,但我认为applicationDidFinishLaunching是在安装应用程序时调用的。如果我按照你的建议,这不是说我每次启动应用程序时,我的价值观都会**重置**到这些值。当我在游戏中改变这些值时,这些值不是**应该重置每次发射。 – Adi219

+0

@Dev_Tandel阅读文档:https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623053-applicationdidfinishlaunching – dirtydanee

+0

@AdityaChaurasia不一定,它是一个尚未,但将很快被弃用的API。 Apple敦促你使用我发布的功能。 – dirtydanee

1

令d = UserDefaults.standard

let defaultValues = ["highScore" : 0, 
        "second"  : 0, 
        "third"  : 0, 
        "balls"  : 0, 
        "maxLives" : 5, 
        "increaseML" : 250] 

d.register(defaults: defaultValues) 
d.synchronize()