键值观察者不会改变自己的属性

时间:2015-04-21 22:18:49

标签: cocoa-touch key-value-observing

我正在尝试收到名为“currentTopViewPosition”的属性更改时的通知。我使用以下代码注册更改并接收它们:

[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毫秒打印出一个值来测试以确保该值实际发生了变化,并且它正在发生变化。

我似乎从来没有让Key-value观察工作,所以我做错了吗?错过了一步?

谢谢!

1 个答案:

答案 0 :(得分:0)

制作您的媒体资源的最简单方法是在readwrite文件中将该资源重新声明为implementation

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

然后在设置值时,请确保使用属性设置器。例如。 self.currentTopViewPosition = 1

如果您直接使用ivar手动设置值,则必须手动生成KVO调用。像这样:

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