Почему я не могу наблюдать свойство 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 Обеспечение соответствия KVC раздел:
Для свойств, которые являются атрибутом или отношением «один к одному», для этого требуется, чтобы ваш класс:
- Реализуйте метод с именем
-<key>
, -is<Key>
или используйте переменную экземпляра <key>
или _<key>
.
- Если свойство изменчиво, оно также должно реализовывать
-set<Key>:
.
- Ваша реализация метода
-set<Key>:
не должна выполнять проверку.
- Ваш класс должен реализовать
-validate<Key>:error:
, если для ключа подходит валидация.
В документации к свойству editing
указано, что оно определено как:
@property(nonatomic, getter=isEditing) BOOL editing
Поскольку это свойство не является изменяемым, единственная точка, к которой оно должно соответствовать, - это первая (т.е., например, определен метод -is<Key>
). Вы можете увидеть, что он соответствует этому, посмотрев объявление свойства и заметив, что определен метод isEditing
. Таким образом, он должен быть совместимым с наблюдением значения ключа. Почему это не работает?