2015-04-21 2 views
0

Я пытаюсь получить уведомления о том, когда изменяется свойство «currentTopViewPosition». Я использовал следующий код для регистрации изменений и получить их:Key-Value Observer не меняет свое собственное свойство

[self addObserver:self 
forKeyPath:@"currentTopViewPosition" 
options:NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld|NSKeyValueObservingOptionPrior 
context:NULL]; 

Затем принимающая сторона:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    NSLog(@"Key Path: %@\n change: %@",keyPath, change); 
} 

Но ничего становилось для него вошли.

Я протестировал, чтобы убедиться, что значение действительно меняется с помощью NSTimer, чтобы распечатать его значение каждые 5 мс, и оно менялось.

Я никогда не получал наблюдение за ключом, чтобы работать, так что я делаю что-то неправильно? пропустить шаг?

Спасибо!

+0

UIKit не гарантированно KVO уступчивых – danielbeard

+0

@danielbeard Но что это охватывает? Это настраиваемое свойство в подклассе uiviewcontroller, ли это дисквалифицирует его? – SnoApps

+0

Как это рассчитывается? Можете ли вы показать, где определено 'currentTopViewPosition'? – danielbeard

ответ

0

Самый простой способ сделать вашу собственность состоять в том, чтобы повторно использовать свойство как readwrite внутри вашего файла implementation.

@property (nonatomic, readwrite, assign) ECSlidingViewControllerTopViewPosition currentTopViewPosition; 

Затем, установив значение, убедитесь, что вы используете средство настройки свойств. Например. self.currentTopViewPosition = 1

Если вы вручную устанавливаете значение с помощью ivar напрямую, вам придется генерировать вызовы KVO вручную. Как это:

[self willChangeValueForKey:@"currentTopViewPosition"]; 
_currentTopViewPosition = 1; 
[self didChangeValueForKey:@"currentTopViewPosition"]; 
+0

Хорошо спасибо, поэтому, устанавливая свойство с помощью _currentTopViewPosition, просто устанавливает iVar прямо тогда? – SnoApps

+1

Да, сеттер автогенерируется и обрабатывает KVO, атомный/неатомный и память (в этом случае назначают). – danielbeard

 Смежные вопросы

  • Нет связанных вопросов^_^