我一直在处理我的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")
在其他地方设置默认值后,最初使用之前发布的代码。
答案 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
}