Warum kann ich die editing
Eigenschaft einer Instanz von UITableViewController
nicht beobachten?Die Bearbeitungseigenschaft eines UITableViewControllers beobachten
Ich verwende den folgenden Code:
[self addObserver:self
forKeyPath:@"editing"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];
Und haben die Methode implementiert:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
... aber die observeValueForKeyPath
Methode wird nie, wenn dieser Wert ändert genannt.
Nach Ensuring KVC Compliance Bereich von Apple:
Für Eigenschaften, die ein Attribut oder eine zu-Eins-Beziehung sind, erfordert dies, dass Ihre Klasse:
- ein Verfahren
-<key>
namens Implement,-is<Key>
, oder haben Sie eine Instanzvariable<key>
oder_<key>
. Wenn die Eigenschaft änderbar ist, sollte sie auch-set<Key>:
implementieren.- Ihre Implementierung der
-set<Key>:
-Methode sollte keine Validierung durchführen.- Ihre Klasse sollte
-validate<Key>:error:
implementieren, wenn die Validierung für den Schlüssel geeignet ist.
Die Dokumentation für die editing
Eigenschaft besagt, dass es ist wie folgt definiert:
@property(nonatomic, getter=isEditing) BOOL editing
Da diese Eigenschaft nicht wandelbar ist, ist es der einzige Aufzählungspunkt, um die erste ist entsprechen müssen (dh dass zB eine -is<Key>
Methode definiert ist). Sie können sehen, dass es dies entspricht, indem Sie die Deklaration der Eigenschaft betrachten und feststellen, dass eine isEditing
Methode definiert ist. Daher sollte Key-Value-Observing-konform sein. Wie kommt es, dass es nicht funktioniert?
Nur aus Neugier, warum versuchen Sie, die Eigenschaft zu beobachten, im Gegensatz zur Implementierung von 'setEditing: animated:'? –
@Gordon: zum Debuggen von Gründen im Zusammenhang mit dieser Methode. – Senseful