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

시도 확인해야합니다. 그것은 KVO를 산들 바람처럼 만듭니다. – allprog

답변

1

self.aSubjectView 초기화 및 관찰자를 추가 할 때 nil을하지해야합니다. self.aSubjectView가 초기화되는 경우

는 observeValueForKeyPath 당신은 현재 바로 확인하고 있지만 오히려

if (object == self.aSubjectView) 

당신이 KVO를 원하는 경우에, 나는 당신이 ReactiveCocoa을 확인하시기

[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

은 aSubjectView의 sizeForScrollView 속성입니다 (sizeForScrollView = CGSizeMake (width, height)). 옵저버가 추가 된 후 – hacker2007

관련 문제