键值观察器在其自己的属性上不会更改



我正在尝试在名为"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 毫秒打印出其值并且它正在发生变化。

我似乎从未让键值观察工作过,所以我做错了什么吗? 缺少一个步骤?

谢谢!

创建属性的最简单方法是将属性重新声明为 implementation 文件中的readwrite

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

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

如果直接使用 ivar 手动设置值,则必须手动生成 KVO 调用。喜欢这个:

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

相关内容

最新更新