iOS NSUserDefaults Überwachen der Änderung von Werten für einen einzelnen Schlüssel

8

Ich habe den folgenden Code, der darauf abzielt, das Ereignis eines NSUserDefaults-Werts abzufangen, der sich für einen bestimmten Schlüssel ändert.

%Vor%

Aber der observeValueForKeyPath wird nie aufgerufen. Ich habe sogar versucht, SOME_NSSTRING_VARIABLE durch eine Zeichenfolge zu ersetzen, wie in Wertänderungen in einer NSUserDefaults Schlüssel , aber es hat nicht geholfen.

Aktualisierung: Ich ändere die NSUserDefaults von einer Tabview. Der obige Code zum Überwachen von Änderungen befindet sich auf einer anderen Registerkarte desselben Tabview-Controllers. In der Registerkarte, in der ich die Änderungen überwache (die Registerkarte, in der sich der obige Code befindet), füge ich ein:

hinzu %Vor%

Der aktualisierte NSUserDefaults-Wert wird korrekt abgerufen, aber der Parameter "observeValueForKeyPath" wurde nie aufgerufen.

    
Sankar P 28.05.2012, 12:09
quelle

3 Antworten

20

Bearbeiten: viewDidUnload ist jetzt veraltet, verwenden Sie dealloc anstelle von removeObserver

Das sollte perfekt funktionieren, das habe ich gerade hier getestet.

%Vor%

Dinge, die Sie testen könnten.

  • Setzen Sie einen Haltepunkt in viewDidUnload und stellen Sie sicher, dass die Ansicht nicht auf Ihnen verschwindet (da Sie SomeKey von einem anderen viewController ändern). Wenn dies der Fall ist, verschieben Sie vielleicht Ihren Register- / Abmeldecode in init / dealloc abhängig davon, wie Ihre VC funktioniert.

  • Verwenden Sie expliziten KeyPath wie @"SomeKey" nicht eine Substitution wie SOME_NSSTRING_VARIABLE

trapper 28.05.2012, 12:38
quelle
3

Schnelle Version:

%Vor%     
fede1608 28.10.2015 17:31
quelle
3

Schnelle 3 Version:

%Vor%     
KaraBenNemsi 22.04.2017 14:18
quelle

Tags und Links