editing
のインスタンスのプロパティを観察できないのはなぜUITableViewController
ですか?
私は次のコードを使用しています:
[self addObserver:self
forKeyPath:@"editing"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];
メソッドを実装しました:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
...しかし、observeValueForKeyPath
この値が変更されたときにメソッドが呼び出されることはありません。
Apple のEnsuring KVC Complianceセクションによると:
属性または対 1 の関係であるプロパティの場合、クラスは次のことを行う必要があります。
-<key>
、 という名前のメソッドを実装する-is<Key>
か、インスタンス変数<key>
またはを持ちます_<key>
。- プロパティが変更可能な場合は、 も実装する必要があります
-set<Key>:
。- メソッドの実装では、
-set<Key>:
検証を実行しないでください。-validate<Key>:error:
検証がキーに適している場合、クラスは実装する必要があります。
プロパティのドキュメントには、次のediting
ように定義されていると記載されています。
@property(nonatomic, getter=isEditing) BOOL editing
このプロパティは可変ではないため、準拠する必要がある唯一の箇条書きは最初のものです (つまり、-is<Key>
メソッドが定義されているなど)。isEditing
プロパティの宣言を見て、メソッドが定義されていることに気付くと、これに準拠していることがわかります。したがって、Key Value Observing に準拠する必要があります。どうしてうまくいかないの?