2015-01-11 60 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

相關問題