返回Swift/Xcode 6中设置包开关的值

MJQ*_*347 1 xcode ios swift

我很难返回存储的布尔键的值.

我的root.plist看起来像这样:

在此输入图像描述

我在AppDelegate中得到了这个:

    let a = NSUserDefaults.standardUserDefaults().boolForKey("sound")

    if a { // This is where it breaks
        println("sound is on")
    }
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?

Mar*_*kle 12

首先,您应该注册默认值,以便一切都已同步并分配默认值.然后你就会知道存在一个值.这些值在启动时不会自动同步.

var appDefaults = Dictionary<String, AnyObject>()
appDefaults["sound"] = false
NSUserDefaults.standardUserDefaults().registerDefaults(appDefaults)
NSUserDefaults.standardUserDefaults().synchronize()

let a = NSUserDefaults.standardUserDefaults().boolForKey("sound")

if a { // This is where it breaks
    println("sound is on")
}
Run Code Online (Sandbox Code Playgroud)

以下是相关文章的摘录.

当您的应用程序使用设置包时

请记住,您还应该使用registerDefaults:当您的应用使用设置包时.由于您已在设置包的plist中指定了默认值,因此您可能希望应用自动选择这些值.但事实并非如此.设置包中包含的信息仅由iOS Settings.app读取,绝不会被您的应用读取.为了让您的应用程序使用与Settings.app中显示的相同的默认值,您必须手动将用户默认值及其默认值复制到单独的plist文件中,并将其注册到默认数据库,如上所示.

HERE是直接来自Apple的相关讨论.

注册默认值

讨论

如果没有注册域,则使用指定的字典创建一个注册域,并将NSRegistrationDomain添加到搜索列表的末尾.注册域的内容不会写入磁盘; 每次应用程序启动时都需要调用此方法.您可以将plist文件放在应用程序的Resources目录中,并使用从该文件读入的内容调用registerDefaults:.