Perché non è possibile osservare la proprietà editing
di un'istanza di UITableViewController
?Osservazione della proprietà di modifica di un UITableViewController
Sto utilizzando il seguente codice:
[self addObserver:self
forKeyPath:@"editing"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];
e hanno attuato il metodo:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
... ma il metodo observeValueForKeyPath
non viene mai chiamato quando questo valore cambia.
Secondo Ensuring KVC Compliance sezione di Apple:
Per le proprietà che sono un attributo o una relazione a-uno, questo richiede che la classe:
- Implementare un metodo denominato
-<key>
,-is<Key>
o una variabile di istanza<key>
o_<key>
.- Se la proprietà è modificabile, è necessario implementare anche
-set<Key>:
.- L'implementazione del metodo
-set<Key>:
non deve eseguire la convalida.- La classe deve implementare
-validate<Key>:error:
se la convalida è appropriata per la chiave.
La documentazione per la proprietà editing
, afferma che essa è definita come:
@property(nonatomic, getter=isEditing) BOOL editing
Dal momento che questa proprietà non è mutabile, l'unico punto di proiettile che deve essere conforme alle è il primo (cioè che esiste un metodo -is<Key>
definito, ad esempio). Si può vedere che si conforma a questo osservando la dichiarazione della proprietà e notando che esiste un metodo isEditing
definito. Pertanto, dovrebbe essere conforme al Key Value Observing. Come mai non funziona?
Solo per curiosità, perché stai cercando di osservare la proprietà, invece di implementare 'setEditing: animated:'? –
@Gordon: per motivi di debug relativi a tale metodo. – Senseful