Sto utilizzando KVC/KVO per creare un'implementazione personalizzata dei binding per un progetto University (è necessario essere personalizzati in quanto voglio fare cose oltre a ciò che possono fare i bindings, inclusa la corsa su iOS).Ricezione di 2 notifiche KVO per una singola modifica KVC
Ho un "controller dei collegamenti" che registra le notifiche KVO su un numero di chiavi su un oggetto (utilizzando addObserver: forKeyPath: options: context :) e ricevo notifiche. Tuttavia, ricevo due notifiche per ogni modifica. Ho un'idea per una soluzione alternativa, ma preferirei risolvere perché questo sta accadendo e correggerlo!
Qualcuno ha qualche idea del perché questo potrebbe accadere? Sono certo di aver registrato ciascuna notifica una sola volta e di annullare la registrazione una sola volta fa sì che entrambe le notifiche si interrompano.
Grazie.
Edit:.
ho una richiesta di un codice, quindi mi metterò un po 'in' un po 'ruvido, al momento, è in sostanza ancora una prova di concetto, in modo da portare con me.
Questa è una delle proprietà che sto osservando (lo so che è un po 'strano, ma questa classe espone essenzialmente determinate proprietà di un NSManagedObject come proprietà di se stesso):
- (void)setName:(NSString *)name
{
[self willChangeValueForKey:@"name"];
[contact setFirstName:name];
[self didChangeValueForKey:@"name"];
}
Questo è il codice che uso osservare che la proprietà (confermata per essere eseguito solo una volta, e solo in un unico luogo):
[viewModel addObserver:self
forKeyPath:@"name"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial)
context:viewController];
Eventuali chiamate dopo ciò che cambiano tale proprietà, ad esempio:
viewModel.name = @"Joe";
[viewModel setName: @"Joe"];
[viewModel setValue: @"Joe" forKey: @"name"];
farà sì che il metodo:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
essere chiamati due volte, con gli stessi argomenti ogni volta.
Inserisci il codice (rilevante). –