Swift 难以注册iOS应用程序的默认值

Swift 难以注册iOS应用程序的默认值,swift,settings.bundle,Swift,Settings.bundle,我一直在为我的iOS应用程序开发一个设置包,并添加了一些切换开关来设置单位。出于某种原因,我在启动时注册默认值的方式不起作用。在我的appDelegate的didFinishLaunching方法中,我添加了: let defaultDict = ["altitudeMeters" : 3.28084] NSUserDefaults.standardUserDefaults().registerDefaults(defaultDict) NSUserDefaults.standardUse

我一直在为我的iOS应用程序开发一个设置包,并添加了一些切换开关来设置单位。出于某种原因,我在启动时注册默认值的方式不起作用。在我的appDelegate的didFinishLaunching方法中,我添加了:

let defaultDict  = ["altitudeMeters" : 3.28084]

NSUserDefaults.standardUserDefaults().registerDefaults(defaultDict)

NSUserDefaults.standardUserDefaults().synchronize()
当我启动应用程序并获取id为“altitudeMeters”的切换开关的值时,它返回“0.0”。如果我更改开关的位置,它将返回在设置包中输入的值。注册此开关的默认值时是否缺少某些内容

开关设置如下:

我一直在尝试使用以下方法访问该值:

let altitudeFactor = NSUserDefaults.standardUserDefaults().doubleForKey("altitudeMeters")

在其他地方设置默认值后,最初使用先前发布的代码。

当您存储字典时,它将其存储为[NSObject:AnyObject]?,因此您需要按照以下步骤执行:

让myDefaultDict=[“高度表”:3.28084]

func saveMyDictionary(){
   NSUserDefaults.standardUserDefaults().setObject(myDefaultDict, forKey: "myDefaultDict")
}
func loadAltitude() -> Double? {
    if let loadedDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey("myDefaultDict") {
        if let altitudeStored = loadedDictionary["altitudeMeters"] as? Double {
            return altitudeStored
        }
    }
    return nil
}

saveMyDictionary()

let altitudeFactor = loadAltitude() // it will return an optional

println(altitudeFactor!)  // you can force unwrap it if you are sure it wont be nil

// otherwise you can you if let
if let altitudeFactor = altitudeFactor {
    println(altitudeFactor) // inside the brackets it is not an optional
}
如果需要删除/重置其值:

NSUserDefaults.standardUserDefaults().removeObjectForKey("myDefaultDict")
您也可以将其另存为Double,而不是像这样的字典:

func saveAltitudeMeters(high:Double){
    NSUserDefaults.standardUserDefaults().setDouble(high, forKey: "altitudeMeters")
}
func loadAltitudeMeters() -> Double? {
    return NSUserDefaults.standardUserDefaults().doubleForKey("altitudeMeters")
}

saveAltitudeMeters(3.7)

if let loadedAltitudeMeters = loadAltitudeMeters() {
    println(loadedAltitudeMeters)   // 3.7
}

我尝试添加您建议的内容,但在启动应用程序后,如果我使用
让altitudeFactor=NSUserDefaults.standardUserDefaults().doubleForKey(“altitudeMeters”)
调用该设置的值,我仍然得到
0.0
您没有按照我理解的方式执行我告诉您的操作,您提供的代码仍然是初始化默认值的AppDelegate代码。那么,在以这种方式进行设置之后,我如何访问视图控制器中开关的值?您认为您可以为我指出正确的方向,以便访问我的设置吗?我有点困惑。很抱歉,我不得不问另一个愚蠢的问题,但现在我已经在我的AppDelegate中设置了你的函数,我最终需要在我自己的视图控制器中访问这个值。我认为我不能真正创建AppDelegate的实例来调用loadAltitude()方法。我是不是误解了什么?