2010-12-10 4 views
18

Die NSUserDefaults API-Dokumentation hat die boolForKey: Nachricht, die wie folgt beschrieben wird -NSUserDefaults boolforKey Einschränkung von Design?

boolForKey: 

Gibt den Booleschen Wert mit dem angegebenen Schlüssel zugeordnet ist.

- (BOOL)boolForKey:(NSString *)defaultName 

Rückgabewert Wenn ein boolescher Wert mit DEFAULT in den Benutzervorgaben zugeordnet ist, wird dieser Wert zurückgegeben. Andernfalls wird NO zurückgegeben.

Vorausgesetzt, dass ein [[NSUserDefaults standardUserDefaults] boolForKey:@"some_Key"] gibt ein Nein zurück, kann es entweder sein, weil der Schlüssel nicht existiert oder der Schlüssel existiert und hat einen boolean Wert NO. Wie können wir unterscheiden? Ab sofort kann ich nur vermeiden, in diese Situation vorzudringen.

+0

http://stackoverflow.com/questions/1965765/iphone-dev-nsuserdefaults-check-for-boolean-existance. Ich habe das NICHT gefunden, als ich vorher gesucht habe. :) –

Antwort

32

Sie verwenden die Standardeinstellungen des Benutzers falsch. Beim Start Ihrer App sollten Sie -[NSUserDefaults registerDefaults:] mit einem Wörterbuch aufrufen, das die Standardwerte für alle Einstellungen enthält. Wenn der Benutzer keine Einstellung festgelegt hat, gibt -boolForKey den Standardwert zurück.

+0

+1 für registerDefaults erhalten. – JeremyP

+4

Ich würde nicht so weit gehen und sagen, dass er die Benutzereinstellungen falsch verwendet. Das Registrieren von Standardeinstellungen ist optional und in seiner Situation wahrscheinlich bequemer, aber Mike Abdullahs Antwort passt einfach besser. –

29

Verwenden Sie auch die -objectForKey: Methode. Dies wird Ihnen sagen, ob der Schlüssel existiert.

+1

BOOLs sind keine Objekte, daher kann dies nicht verwendet werden. –

+20

Ja 'BOOL's sind keine Objekte, aber' NSUserDefaults' behandelt sie als 'NSNumber' Instanzen, die Sie von' -objectForKey: ' –