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.
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
Tags und Links ios nsuserdefaults