Ich verwende [NSUserDefaults standardDefaults]
, um einen booleschen Wert zu speichern, um zu sehen, ob es das erste Mal ist, dass die Anwendung gestartet wird ... Wenn ja, sollte die App ein Registrierungsfenster anzeigen.
Es funktionierte bis letzte Woche gut, aber jetzt, manchmal, wenn ich zu anderen Apps wechsle und nach einer Weile zurückkomme, sehe ich, dass die Registrierungsseite geladen wird, während sie nicht sollte.
Ich habe NSLog
verwendet, um zu sehen, was in [NSUserDefaults standardDefaults]
gespeichert ist, und ich sehe, dass die Werte, die ich gespeichert habe, auf nil (null)
gesetzt wurden, während ich das nirgendwo in meinem Code getan habe.
Weiß jemand, warum die Werte zurückgesetzt werden?
PS: Tatsächlich sind die Werte nicht dauerhaft verloren, denn wenn ich nichts auf der Registrierungsseite mache und die App stattdessen verlasse, wird sie normal beim nächsten Aufruf der App starten !! !
Vor langer Zeit bin ich auf dieses Problem gestoßen. Es stellte sich heraus, dass eine von mir verwendete Bibliothek von Drittanbietern den gleichen Schlüssel verwendet, wenn Werte in NSUserDefaults
gespeichert werden. Versuchen Sie, Ihr Projekt nach diesem Schlüssel zu suchen, vielleicht wird er von etwas anderem zurückgesetzt.
Hier sind die Möglichkeiten, die ich kenne, um Werte in NSUserDefaults
in der Reihenfolge der Wahrscheinlichkeit zu verlieren:
Es klingt wie aus der Diskussion hier, dass Sie 1,2,4 und wahrscheinlich 3 & amp; 5. Der einzige nächste Debug-Schritt, den ich mir vorstellen kann, ist, das Testtelefon jederzeit in einer gesperrten Schublade zu speichern.
Aber ich würde mein Geld für ein zeitweiliges Problem hinterlassen, das # 1 verursacht. Dafür benötigen wir den geposteten Code, den wir untersuchen müssen.
BEARBEITEN -
Ein hoher Prozentsatz der NSUserDefaults
Probleme, die hier gepostet werden, sind zum Speichern von BOOLs und anderen skalaren Typen. Es sieht so aus, als ob der OP weiß, wie man in NSNumbers einpackt, aber BOOLS sind besonders problematisch, weil es leicht ist, falsche y-Werte wie NO no und nil und NSNull
instance zu verwechseln.
Lass uns das auf die Liste für diese Frage in # 2.5 werfen. Da würde wieder Code zur Bestätigung benötigt.
Wenn das beim Testen passiert, ist das normal. Die Tatsache, dass das Programm sogar diese Entscheidung trifft (sollte ich die Registrierungsseite zeigen?) Deutet darauf hin, dass die App gewaltsam beendet wurde und von vorne anfängt. Beim Testen kann dies dazu führen, dass die App-Sandbox gelöscht wird, wenn die App von Xcode neu geladen wird. Im echten Leben eines echten Benutzers wird dies jedoch nicht passieren (es sei denn, der Benutzer löscht die App vom Gerät).
Tags und Links objective-c iphone ios nsuserdefaults