Я пытаюсь понять наблюдение за ключевыми значениями в iOS, но я думаю, что я не делаю что-то правильно. Как идея, я попытался добавить наблюдателя в свойство контроллера представления (представление, связанное с IBOutlet). Этот вид (tableIndicator) анимирован, поэтому я хотел бы посмотреть, могу ли я заставить наблюдателя реагировать, когда изменяется кадр представления.KVO не работает для свойства класса
Так что я сделал следующее, внутри контроллера представления viewDidLoad:
[tableInidicator addObserver:self forKeyPath:@"frame" options:0 context:nil];
tableIndicator
мой взгляд/класс недвижимость, я добавляю контроллер представления (сам) в качестве наблюдателя, 0 для опции по умолчанию и кадр в качестве наблюдаемого ключевого значения.
Затем я жду, чтобы увидеть, если эта функция вызывается при изменении кадра:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"value changed");
}
... но ничего не происходит.
Я не обязательно ищу исправления для этого кода, поскольку он не предназначен для других целей, кроме как для меня, и я был бы очень благодарен, если бы кто-нибудь мог указать мне, что я делаю неправильно. Некоторые хорошие примеры/учебники также были бы потрясающими.
Те, которые я нашел (http://iphonedevelopment.blogspot.ro/2009/02/kvo-and-iphone-sdk.html/http://nachbaur.com/blog/back-to-basics-using-kvo), не охватывали такие случаи. Они были только наблюдателями, примененными к классу, чтобы наблюдать за одним из его свойств, а не за свойство (пользовательского) объекта внутри класса, что, по-моему, было бы более полезным для меня.
Спасибо заранее
[править] Для тех, кто пропустил мой комментарий о принятом ответе:
Изменение центра открывается вид будет, по-видимому, не вызвать наблюдателя для свойства кадра. Вы должны сами изменить кадр.
Насколько я понял из вашего вопроса, если tableindicator ур ViewController затем пойти на NSNotification вместо КВО –
Я знаю, как использовать NSNotification.Я пытаюсь использовать KVO для этого, чтобы лучше понять эту технику. – BBog
Я знаю, что это очень старый вопрос, на который был дан ответ давно, но я хотел добавить комментарий ради других, кто может его найти. Что вы должны понимать о «кадре» представления в UIKit, так это то, что оно синтезируется из значений, найденных в «границах» и «центре». Если вы хотите сделать KVO по позиции или размеру представления, вам обычно лучше соблюдать границы или центр, а не свойство кадра. Свойство frame будет только запускать уведомления KVO, если вы измените его напрямую. –