2010-07-07 9 views
9

Ich entwickle eine iPhone-Anwendung, ich stoße auf ein Problem auf dem iOS4 wegen Multi-Task.Wie bekomme ich ein Update NSUserDefault auf iOS 4?

Diese Anwendung verfügt über die Standardeinstellungen, die in einem Settings.bundle definiert sind. Wenn ich meine Anwendung starte, habe ich sie verlassen (so geht es im Hintergrund). Ich werde die Einstellungen ändern und die Anwendung neu starten (es kommt aus Standby und Methode: applicationDidBecomeActive() wird aufgerufen).

Werte in NSUserDefault sind keine Updates, aber wenn ich die Anwendung verlassen und neu starten. Die Werte sind gut.

Hat jemand das gleiche Problem wie ich? Was mache ich falsch?

Vielen Dank für Ihren Rat/Hilfe.

+0

Aktualisieren Sie die Standardeinstellungen, sobald Ihre App wieder aktiv wird? Wenn Sie nicht sind, sollten Sie sie im Hintergrund ändern. – iwasrobbed

Antwort

20

hatte ich das gleiche Problem wie du, und bekam um sie von

[[NSUserDefaults standardUserDefaults] synchronize]; 

in applicationDidBecomeActive aufrufen.

Aus irgendeinem Grund ist das Objekt [NSUserDefaults standardUserDefaults], auf das Sie in Ihrer App zugreifen können, nicht mit den tatsächlichen plist-Dateien synchronisiert, die es unterstützen, wenn eine App nach dem Aussetzen wieder aktiv wird. Der Aufruf der Methode synchronize erzwingt eine Synchronisierung.

+0

Es ist wichtig zu betonen, dass die Synchronisation aufgerufen werden muss, nachdem Sie NSUserDefaults geändert haben, wenn Sie diese Änderungen in eine Datei schreiben möchten. Wenn Sie dies nicht tun, werden die Änderungen nur im Speicher gespeichert. – Goles

+1

@ Mr.Gando Das ist einfach nicht wahr. 'NSUserDefaults' wird auch periodisch automatisch mit der Datei synchronisiert. –

3

Sie müssen auf Änderungen der Einstellungen achten. Der beste Weg, es zu tun ist, einen Hörer einzurichten, wo Sie es brauchen:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(settingsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 

Das einzige, was man darauf achten muss, ist, dass Sie dies nicht tun Änderung alle Einstellungen in Ihrem Hörer, oder Sie bekommen unendliche Rekursion ohne ein wenig mehr Logik hinzugefügt werden.

Ich würde von der Synchronisierung bleiben, weil in meiner Erfahrung fand ich, ich musste es zweimal ausführen. Aber das ist ein zufälliges Verhalten. Ein Listener benachrichtigt Sie, wenn die neuen Einstellungen erneut aus dem Speicher gelesen wurden.

+0

Der Nachteil davon ist, dass es auch ausgelöst wird, wenn Sie selbst etwas über 'NSUserDefaults' ändern. Bei jedem Aufruf von '[[NSUserDefaults standardUserDefaults] setObject: someObject forKey: @" someKey "]' wird diese Benachrichtigung gesendet und die Methode aufgerufen. Was ich nicht (und vermutlich der Fragesteller) möchte. Außerdem hatte ich keine Probleme mit 'synchronize', es hat nur einmal gut funktioniert. –

+0

Dieser Weg ist offensichtlich besser. Aktualisieren Sie einfach die Benutzereinstellungen und ändern Sie das Verhalten nur in der Benachrichtigungsbeobachtung. Außerdem müssen Sie während einer Anwendung, die mit Multitasking von iOS4 ausgeführt wird, Änderungen in Echtzeit vornehmen. – Eonil

Verwandte Themen