Ich versuche, einen sicheren Schlüsselwert zu implementieren, der auf Schlüsselpfaden beobachtet. Nehmen wir an, dass ich ein Datenmodellobjekt mit dem Namen person
mit einer workplace
-Eigenschaft habe. Die workplace
wiederum haben eine address
Eigenschaft, die ich wünschte, so zu beobachten I Schlüsselwert mit dem folgenden Aufruf Beobachtung einzurichten:Sicherer Schlüsselwert Beobachten von Schlüsselpfaden
[person addObserver:theObserver
forKeyPath:@"workplace.address"
options:NSKeyValueObservingOptionNew
context:NULL];
Dies funktioniert gut, bis die Person am Arbeitsplatz nicht ändert. Sobald dies der Fall ist:
person.workplace = newWorkplace;
das KVC System stürzt die Anwendung korrekt zu sagen, dass „oldAddress freigegeben wurde, während Schlüsselwert Beobachter noch bei ihm registriert wurden“. (alt sein) Adresse des vorherigen Arbeitsplatzes eingeben.
Leider kann ich die Implementierung der Klasse von 'Person' Objekt nicht zwicken, um den Beobachter zu benachrichtigen, dass der Arbeitsplatz weggehen wird. Gibt es ein Muster, um diese Art von Crash zu vermeiden? Vielleicht kann man noch andere Benachrichtigungen bekommen? Wie wird der Schlüsselpfad im Fall von KVC durchlaufen und haben Sie Zugriff auf diese Kette?