2016-07-05 13 views
5

Próbuję zapisać wartość klucza w pliku NSUserDefault, ale nie została zapisana. Oto mój kod:Swift: nie zapisuje wartości NSUserDefaults.standardUserDefaults

func saveData() { 

    let userDefaults = NSUserDefaults.standardUserDefaults() 
    userDefaults.setObject("blablabla", forKey:"data") 
    userDefaults.synchronize() 
} 

Każdy z was wie, dlaczego te dane nie zostały zapisane?

Będę naprawdę wdzięczny za pomoc.

+2

Skąd wiadomo, że nie zapisuje tych wartości np. "Blablabla"? –

+0

Kiedy próbuję załadować wartość "userDefaults.dictionaryForKey (" data ")" jest zawsze zerowa – user2924482

+0

'blablabla' najwyraźniej nie jest słownikiem. ;) – vadian

Odpowiedz

5

Swift 2.x:

Zgodnie ze źródłami Apple:

public func objectForKey(defaultName: String) -> AnyObject? 

odzyskać swoją wartość można użyć:

if let value = userDefaults.objectForKey("data") { 
    // do whatever you want with your value 
    // P.S. value could be numeric,string,.. 
} 
+2

Apple definitywnie nie zaleca używania 'valueForKey' w' NSUserDefaults'. To 'objectForKey'. – vadian

+0

Mam w publicznych aplikacjach bez problemów, gdzie to czytasz, pochodzą ze źródeł, czy możesz opisać dlaczego? –

+0

'valueForKey' jest metodą KVC o specjalnym zachowaniu. Nie używaj go, chyba że naprawdę potrzebujesz KVC. Proszę wysłać * źródło *, w którym Apple używa 'valueForKey' w' NSUserDefaults'. – vadian

4

myślę, robisz to źle, spróbuj tak:

let userDefaults = NSUserDefaults.standardUserDefaults() 
userDefaults.setObject("blablabla", forKey:"data") 



let defaults = NSUserDefaults.standardUserDefaults() 
if let name = defaults.stringForKey("data") { 
    print(name) 
} 

nie będzie w stanie uzyskać dostęp ciąg z dictionaryForKey ponieważ łańcuch nie jest typem wartości słownika. Daj mi znać, jeśli potrzebujesz dalszej pomocy.

2

Nie będzie można uzyskać dostępu do ciągu znaków za pomocą "dictionaryForKey", ponieważ ciąg nie jest typem słownika. Musisz użyć:

if let savedString = userDefaults.stringForKey("data") { 
    print(savedString) 
} 

Jeśli masz jakiekolwiek pytania prosimy daj mi znać :)

Powiązane problemy