难以注册iOS App的默认值

时间:2015-01-11 02:11:24

标签: swift settings.bundle

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

let defaultDict  = ["altitudeMeters" : 3.28084]

NSUserDefaults.standardUserDefaults().registerDefaults(defaultDict)

NSUserDefaults.standardUserDefaults().synchronize()

当我启动应用并获取带有id' altitudeMeters'的切换开关的值时它返回' 0.0'。如果我更改了开关的位置,则返回在我的设置包中输入的值。我在注册此交换机的默认值时是否遗漏了某些内容?

开关设置如下:

enter image description here

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

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

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

1 个答案:

答案 0 :(得分:0)

当你存储你的字典时,它将它存储为[NSObject:AnyObject] ?,所以你需要按照以下方式进行:

让myDefaultDict = [" altitudeMeters" :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
}