2013-08-30 72 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必须初始化,并且在添加观察者时不能为nil。

在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

如果我使用'框'forKeyPath而不是'sizeForScrollView'forKeyPath那么它工作正常...所以有任何限制? – h999

+0

isSubjectView的sizeForScrollView属性曾设置(sizeForScrollView = CGSizeMake(宽度,高度)后添加观察员? – hacker2007