2013-08-30 2 views
2

Я хочу использовать KVO в своем приложении. У меня есть одно свойство класса sizeForScrollView, когда это свойство изменилось, мне нужно уведомление. Я попробовал, но он не работал. Вот код:KVO с пользовательским свойством класса

[self.aSubjectView addObserver:self forKeyPath:@"sizeForScrollView" options:NSKeyValueObservingOptionNew context:NULL]; 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 
     self.scrollView.contentSize = CGSizeMake(self.aSubjectView.sizeForScrollView.width, self.aSubjectView.sizeForScrollView.height); 
     self.aSubjectView.frame = CGRectMake(frameForView.origin.x, frameForView.origin.y, frameForView.size.width, self.aSubjectView.sizeForScrollView.height); 
} 
+0

Если вы хотите КВО, я предлагаю вам проверить ReactiveCocoa. Это делает KVO ветерок. – allprog

ответ

1

self.aSubjectView должен быть инициализирован и не равен нулю при добавлении наблюдателя.

в observeValueForKeyPath вы сейчас просто проверить, если self.aSubjectView инициализируется, но вы должны проверить, а

if (object == self.aSubjectView) 

попробовать

[self.aSubjectView addObserver:self forKeyPath:@"sizeForScrollView" options:NSKeyValueObservingOptionNew context:NULL]; 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 
    if (object == self.aSubjectView) { 
     self.scrollView.contentSize = CGSizeMake(self.aSubjectView.sizeForScrollView.width, self.aSubjectView.sizeForScrollView.height); 
     self.aSubjectView.frame = CGRectMake(frameForView.origin.x, frameForView.origin.y, frameForView.size.width, self.aSubjectView.sizeForScrollView.height); 
    } 
} 
+0

Я просто удалил это условие, а затем его не вызывал ... – h999

+0

, если я использовал 'frame' forKeyPath вместо 'sizeForScrollView' forKeyPath, тогда он отлично работает ... так есть ли какие-то ограничения? – h999

+0

- это свойство sizeForScrollView aSubjectView, когда-либо установленное (sizeForScrollView = CGSizeMake (ширина, высота) ПОСЛЕ того, как наблюдатель был добавлен? – hacker2007

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