2016-06-15 11 views
46

Sto usando il seguente codice per salvare un oggetto per UserDefaults (precedentemente NSUserDefaults) utilizzando Xcode 8:dizionario Salva in userdefaults a Swift 3 con Xcode 8

let defaults = UserDefaults.standard() 
defaults.set(someObject, forKey: "someObject") 
print(defaults.object(forKey: "someObject")) 

someObject è un dizionario e sto in esecuzione sul simulatore.

Per qualche motivo questo non sta salvando il valore e 'nil' è stampato. Mi chiedo se si tratta di un problema con il simulatore.

+0

in realtà è saving..dont sapere qual è il tuo someObject? Basta provare questo defaults.set ("Hello WWDC", forKey: "someObject") e vedrai il risultato –

+0

someObject è un dizionario. Appena modificato – alionthego

+1

@alionthego Ho notato lo stesso problema ma succede solo sul simulatore, quando lo collaudo su un dispositivo reale funziona correttamente. BTW è beta quindi è necessario segnalare un bug –

risposta

8

Questo problema sembra essere causato dall'avere installato due versioni di xcode/simulatore.

Ciò che ha funzionato per me era la disinstallazione di xcode 7 e il mantenimento di xcode 8 beta sul mio sistema. Svuotare il cestino, resettare il simulatore e correre. Ho anche riavviato il mio computer.

Dopo aver seguito questi passaggi, il simulatore è in grado di salvare su UserDefaults.

+0

potresti prelevare il mio problema https://stackoverflow.com/questions/44667335/how-to-pass-prefs-value-data-from-view-controller -to-inside-table-view-cell-with? –

30

Funzionando perfettamente qui con questo ..!

let dict:[String:String] = ["key":"Hello"] 
    UserDefaults.standard.set(dict, forKey: "dict") 
    let result = UserDefaults.standard.value(forKey: "dict") 
    print(result!) 
    // Output -> { key:hello;} 
11

Questo è il problema non documentato ma noto che NSUserDefaults/UserDefualts non funziona nel simulatore iOS 10 se il simulatore 8/9 IOS è stato precedentemente eseguita.

Riavviare il Mac e passare direttamente a XCode 8, il simulatore di iOS 10 risolverà questo problema.

Consulta anche: Why won't my app run in XCode 8 beta (8S128d)

73

Per Swift 3

UserDefaults.standard.setValue(token, forKey: "user_auth_token") 
print("\(UserDefaults.standard.value(forKey: "user_auth_token")!)") 
+0

Grazie. Questo mi ha aiutato. –

+0

utilizzando questo in xcode 8.2.1 mi sto ottenendo nil come risultato ... –

+0

@ Jan, potresti per favore saccheggiare il mio problema bro https://stackoverflow.com/questions/44667335/how-to-pass-prefs-value -data-from-view-controller-to-inside-table-view-cell-con? –