2015-01-11 76 views
0

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

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") 

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

回答

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") 

你也可以将它保存为双代替解释是这样的:

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 
} 
+0

我试着添加你的建议,但启动应用程序后,如果我使用'let altitudeFactor = NSUserDefaults.standardUserDefaults()。doubleForKey(“altitudeMeters”)调用该设置的值,我仍然会得到'0.0' – user3185748

+0

你没有按照我告诉你的方式做 –

+0

我的理解是,你提供的代码仍然是初始化默认值的AppDelegate的代码。那么如何在设置它们之后访问我的视图控制器中的开关值? – user3185748

相关问题