He usado NSNotifications antes, pero esta es la primera vez que intento utilizar KVO en Cocoa Touch.KVO - observeValueForKeyPath no llamado al observar una enumeración
Mi controlador UITableView alterna entre una variedad de fuentes de datos, así que las he encapsulado en diferentes subclases de UITableViewDataSource. Estoy intentando que mi controlador de vista observe una de estas subclases UITableViewDataSource y rastree una enumeración llamada loadState
que refleja los modelos del estado de carga.
puse el observador como esto:
[self.siteUpdatesDataSource addObserver:self
forKeyPath:@"loadState"
options:0
context:nil];
Desde el depurador puedo ver que el observador se ha registrado:
(gdb) po [self siteUpdatesDataSource]
<SiteUpdatesTableViewDataSource: 0x651e5a0>
Current language: auto; currently objective-c
(gdb) po [[self siteUpdatesDataSource] observationInfo]
<NSKeyValueObservationInfo 0x651dd70> (
<NSKeyValueObservance 0x651dd10: Observer: 0xc80f1e0, Key path: loadState, Options: <New: NO, Old: NO, Prior: NO> Context: 0x0, Property: 0x651dd90>
)
Sin embargo, mi método observeValueForKeyPath en mi viewController nunca parece ser llamado. Establecí un punto de inflexión y nada lo alcanza incluso cuando valido que la enumeración ha cambiado.
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
[self.tableView reloadData];
}
Agradezco cualquier idea sobre lo que me estoy perdiendo.
Gracias que hizo el trick.I'll tratar de experimentar un poco más y averiguar por qué el enum no parece generar el cambio. Estoy usando setter sintetizado y getter para la enumeración y actualizando a través de ellos self.loadState = kDataReady por ejemplo – Nick
Espera, dijiste 'hizo el truco' y la siguiente línea dices 'enum doesn' Parece que genera el cambio. ¿Funcionó o no? No tengo problemas con la propiedad de enumeración sintetizada. – hoha
Disculpe, sí, funcionó. Más tarde descubrí que estaba configurando mi enum incorrectamente en un punto. Desafortunadamente, StackOverflow fue leído. único modo cuando me detuve de nuevo a updaet. Perdón por la confusión a pesar de que mi problema era elsew aquí este enfoque me permitió activar el evento de observador y me ayudó a rastrear el problema. – Nick