2015-01-11 2 views
0

Я работаю над набором настроек для моего приложения iOS и добавил несколько тумблеров для установки единиц. По какой-то причине способ регистрации значений по умолчанию при запуске не работает. В моем методе AppDelegate в didFinishLaunching Я добавил:Сложность Регистрация значений по умолчанию для приложения iOS

let defaultDict = ["altitudeMeters" : 3.28084] 

NSUserDefaults.standardUserDefaults().registerDefaults(defaultDict) 

NSUserDefaults.standardUserDefaults().synchronize() 

Когда я запустить приложение и получить значение для переключателя с идентификатором «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") 

вы можете сохранить его и как 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 
} 
+0

Я пытался добавить, что вы предложили, но после запуска приложения, если я позвоню значение этого параметра с помощью 'пусть altitudeFactor = NSUserDefaults.standardUserDefaults(). DoubleForKey («altitudeMeters»)' Я все еще получаю '0.0' – user3185748

+0

Вы не делаете то, что я вам сказал –

+0

Как я понимаю, код, который вы предоставили, по-прежнему является кодом для AppDelegate, который инициализирует значения по умолчанию. Итак, как мне получить доступ к значению моего коммутатора в контроллере просмотра после его настройки таким образом? – user3185748

Смежные вопросы