Key-Value Observer 不会自行改变 属性
Key-Value Observer not changing on its own property
我正在尝试获取名为 "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"];
我正在尝试获取名为 "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"];