NSUserDefaults. setValue funktioniert, nicht setBool

8

Ich versuche einige Einstellungen in NSUserDefaults zu speichern, aber es scheint, dass die App die setBool-Werte nicht speichert.

Das funktioniert:

[[NSUserDefaults standardUserDefaults] setValue: @"hello" forKey: @"test"]; [[NSUserDefaults standardUserDefaults] synchronize];

Wenn ich die App beende und neu starte, wurde der Wert gespeichert. Wie auch immer, wenn ich das tue:

[[NSUserDefaults standardUserDefaults] setBool: YES forKey: @"test"]; [[NSUserDefaults standardUserDefaults] synchronize]; Es wird nicht gespeichert, nachdem ich die App geschlossen und neu gestartet habe.

Soll ich einen Fehlerbericht einreichen, oder fehlt mir hier etwas?

Danke

Bearbeiten:

Ich stelle fest, was ich falsch gemacht habe. In AppDelegate wollte ich überprüfen, ob der boolForKey gesetzt war, und es war nicht ich tat dies:

%Vor%

... wenn es jedoch um boolWithKey geht, ist das "!" überprüfe einfach, ob das Bool JA oder NEIN ist, nicht wenn es Null ist.

    
BlackMouse 06.03.2012, 09:27
quelle

4 Antworten

9

Wie können Sie sicher sein, dass es nicht funktioniert? Ich habe deinen Code ausprobiert und es funktioniert für mich. Sind Sie sicher, dass Sie den Boolean richtig lesen, nachdem Sie ihn geschrieben haben?

Dieser Code sollte funktionieren:

%Vor%     
Antonio MG 06.03.2012, 09:33
quelle
2

Ich hatte das gleiche Problem, indem ich den folgenden Code in meinem AppDelegate hatte, um zu verfolgen, ob der Benutzer einen bestimmten viewController gesehen hat, um eine Walkthrough anzuzeigen, und dann dieses Bool auf NEIN einzustellen, nachdem der Benutzer es gesehen hat.

%Vor%

Aber wenn Sie es später auf NO setzen und prüfen, ob es "existiert", sehen Sie tatsächlich den booleschen Wert NO und setzen ihn auf yes zurück. Die Schnellkorrektur dient nur dazu, den booleschen Wert in einem NSNumber-Objekt zu speichern, so dass Sie prüfen können, ob es existiert, unabhängig davon, ob der Wert JA oder NEIN ist. Siehe unten:

%Vor%     
DanWebster 25.11.2014 23:19
quelle
1

Ich hatte genau das gleiche Problem. Alles außer BOOLs blieb richtig; aber ich habe einige alte codierungsstile von ios 3 verwendet. auf diese weise recodiert, funktioniert alles.

Wenn jemand anderes alte Bücher benutzt ... hier ist ein Beispiel

Schlechte Sachen:

%Vor%

Gute Sachen:

%Vor%

Update: Leider schien das nur kurz zu funktionieren und scheitert nun wieder ... mit Xcode 4.5.2. Tausche einfach Bools gegen ganze Zahlen aus ...

    
hangzhouharry 02.11.2012 20:06
quelle
1

XCode 4.6 scheint das gleiche Problem von Hangzhouharry hervorgehoben zu haben. Ein nützlicher Aufruf ist [[NSUserDefaults standardUserDefaults] dictionaryRepresentation], um zu sehen, ob Ihre Schlüsselwerte so aussehen, wie sie sollten.

Zum Beispiel - & gt; autoLogout = 0;

wurde als Bool gesetzt, [Einstellungen boolForKey: @ "autoLogout"] gibt nichts zurück

[Einstellungen integerForKey: @ "autoLogout"] gibt 0 (als, Art von, erwartet) zurück

    
arcady bob 18.02.2013 02:25
quelle

Tags und Links