Die Beobachtung NSMutableDictionary änderungen
Ist es möglich zu beobachten (abonnieren) ändert die gespeicherten Werte, die unter verschiedenen Schlüsseln in einem NSMutableDictionary? In meinem Fall der Schlüssel bereits vorhanden ist, wenn das Abonnement ist eingeleitet, aber die Werte ändern sich und ich würde gerne benachrichtigt werden, in diesem Fall. Ich möchte die Taste der geänderte Wert in der Meldung.
Ich gehe davon aus, dass, wenn mein Wörterbuch Schlüssel wurden alle NSString Instanzen konnte ich nur abonnieren Schlüssel Weg individuell. Aber was ist, wenn mein Schlüssel nicht-strings? Bin ich Pech in diesem Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist eine interessante Idee. Ich kann nicht finden, alles, was in NSDictionary oder NSDictionaryController, dass sieht vielversprechend aus. Mein Erster Instinkt wäre, die Nutzung Zusammensetzung, um ein NSMutableDictionary und abfangen von aufrufen zu setObject:forKey: (und vielleicht -removeObjectForKey:) informieren die Teilnehmer über änderungen.
Gibt es eine Kakao Mit Liebe post auf Unterklassen NSMutableDictionary das wird wahrscheinlich nützlich sein, sollten Sie sich entscheiden, diesen Weg gehen. Ich habe auch meine eigene NSMutableDictionary Unterklassen, und Sie sind willkommen zu verwenden, die open-source-code.
Könnten Sie design Beobachter-Protokoll, das könnte bestimmte Schlüssel, die überwacht werden sollen. Sollte nicht zu viel code, aber mehr als ich Zeit habe zu weit nach unten im moment.
Habe ich erfolgreich umgesetzt, das jetzt mit Zusammensetzung, um die NSMutableDictionary. Ich bin überrascht, wie wenig code es dauerte. Die Klasse-I-umgesetzt wird Vorstand, repräsentiert das Modell in ein Brettspiel. Jeder kann abonnieren, um änderungen für board-Staaten durch den Aufruf der addObserver: Methode implementiert, wie dieses:
Da kann man nur abonnieren keys mit der KVO-Modell, ich habe geschummelt und abonniert den Beschreibung der Schlüssel, aber die übergabe der Schlüssel selbst als Kontext. In Objekten, die zu beobachten Instanzen von mein Board implementiere ich die
-observeValueForKeyPath:ofObject:change:context:
zu ignorieren Schlüsselpfad string und verwenden Sie einfach den übergebenen Kontext.Mein Board einfach Klasse ist, nicht KVO konform für die künstlichen Eigenschaften, die ich mit dieser Methode, so dass ich bestanden
0
imoptions
Eigenschaft, so dass die KVO-Maschinen versuchen nicht, um die alten/neuen Werte für diese Schlüssel. Das würde dazu führen, dass mein code die Luft zu sprengen.Alles, was verpasst dem board (in meinem einfach Klasse, es gibt nur eine Methode, die dies tut) erhöhen, die notwendigen Mitteilungen zu verursachen, die KVO-Maschinen, um den Sprung in Aktion:
Voila! Abonnement eines NSMutableDictionary mit nicht-string-Schlüssel!