Ich verwende KVC/KVO, um eine benutzerdefinierte Bindungsimplementierung für ein Universitätsprojekt zu erstellen (es muss benutzerdefiniert sein, da ich Dinge ausführen möchte, die über Bindings hinausgehen iOS).Empfangen von 2 KVO-Benachrichtigungen für eine einzelne KVC-Änderung
Ich habe eine 'Bindings Controller', die für KVO-Benachrichtigungen auf einer Reihe von Schlüsseln auf einem Objekt registriert (mit addObserver: forKeyPath: Optionen: Kontext :) und ich bekomme Benachrichtigungen. Ich erhalte jedoch zwei Benachrichtigungen für jede Änderung. Ich habe eine Idee für eine Workaround, aber ich würde lieber trainieren warum dies geschieht und korrigieren Sie es!
Hat jemand irgendwelche Ideen, warum dies passieren könnte? Ich bin mir sicher, dass ich jede Benachrichtigung nur einmal registriert habe, und die einmalige Abmeldung bewirkt, dass beide Benachrichtigungen beendet werden.
Danke.
Edit:.
Ich habe eine Anfrage für einige Codes, also werde ich einige in setze Es ist ein wenig rau im Moment, es ist im Wesentlichen immer noch ein Proof of Concept, mit mir so tragen.
Dies ist eine der Eigenschaften ich beobachtet bin (ich weiß, es ist ein bisschen seltsam, aber diese Klasse stellt im Wesentlichen bestimmte Eigenschaften eines NSManagedObject als Eigenschaften von mir selbst):
- (void)setName:(NSString *)name
{
[self willChangeValueForKey:@"name"];
[contact setFirstName:name];
[self didChangeValueForKey:@"name"];
}
Dies ist der Code, den ich verwende diese Eigenschaft zu beobachten (bestätigt nur einmal ausführen, und nur an einem einzigen Ort):
[viewModel addObserver:self
forKeyPath:@"name"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial)
context:viewController];
Alle Anrufe nach dem, was dieser Eigenschaft ändern, zB:
viewModel.name = @"Joe";
[viewModel setName: @"Joe"];
[viewModel setValue: @"Joe" forKey: @"name"];
wird das Verfahren verursachen:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
zweimal aufgerufen werden, mit den gleichen Argumenten jedes Mal.
Post (relevanten) Code. –