Ich übergebe einen Integer-Wert an das NSUserDefault-Objekt, das zur Verwendung beim Laden meiner App gespeichert wird. I HAD es funktioniert einwandfrei, bis ich versuchte, diesen ganzzahligen Wert zu einem Floaten zu wechseln. Es verursachte eine ganze Reihe von Problemen, also korrigierte ich meinen Ansatz und befehligte meinen Weg zurück in die Sicherheit von ganzen Zahlen ... oder so, dachte ich.Nimmt NSUserDefault einige Sekunden in Anspruch, um die Werte zu registrieren, die ich übergeben habe?
Wenn ich den Wert speicherte, konnte ich meinen Simulator sofort schließen, und die Konsole spuckte die korrekt gespeicherte Nummer ohne Probleme aus. JETZT, nach diesem dummen Float-Chaos (Könnte ich mein NSUserDefault-Objekt beschädigt haben? Das klingt einfach doof ...), die richtige Zahl zu bekommen ist etwas Glücksspiel.
Ich habe eine Reihe von NSLogs durchlaufen und kann bestätigen, dass der Wert, den ich speichere, wenn ich save drücke, korrekt an die set-Methode in der UserDefault-Klasse übergeben wird. Die Set-Methode ruft den Wert korrekt und setzt sie dann auf das NSUD Objekt wie folgt:
[self setObject:[NSNumber numberWithInteger:num] forKey:savedNum];
Wenn ich die get-Methode für das Objekt ausgeführt werden, die Konsole druckt korrekt den Wert. Wenn die App geladen wird, ruft sie die gleiche get-Methode auf, die ich gerade getestet habe, aber sie gibt nicht immer das Richtige zurück. Oftmals ist es der Wert des vorherigen Speichers, der angezeigt wird.
Wenn ich die Speichern-Taste drücke und 5 Sekunden warte, bevor ich die App schließe, hat es vorher richtig funktioniert, aber es ist selten. Wenn ich 10 Sekunden warte, spuckt es die richtige Nummer aus.
Warum hätte die Zeit etwas mit dieser Operation zu tun? Ich bin gerade bei einem vollständigen Verlust, warum dies vorkommt, vor allem, weil ich es gerade gestern richtig gearbeitet hatte ...
Alle Gedanken oder Eingaben würden geschätzt werden !!
Ich bin nicht vertraut damit, wie synchronisiere ich? – Jerry
Guter Anruf - aber ich denke, dass es nur steuert, dass es in Flash geschrieben wird. (Laut der Dokumentation) Es hält einen "In-Memory-Cache" - der Dinge beim Zurücklesen konsistent machen sollte - noch bevor es in Flash geschrieben wurde. – Brad
@Jerry Do [nsudobjectnameshere synchronisieren]. –