Cocoa touch 键值观察者本身的属性不改变

Cocoa touch 键值观察者本身的属性不改变,cocoa-touch,key-value-observing,Cocoa Touch,Key Value Observing,我正在尝试获取名为“currentTopViewPosition”的属性更改时的通知。我使用以下代码注册并接收更改: [self addObserver:self forKeyPath:@"currentTopViewPosition" options:NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld|NSKeyValueObservingOptionPrior

我正在尝试获取名为“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毫秒打印一次它的值,以确保该值确实在变化

我似乎从来没有得到过关键价值观的观察,所以我做错了什么吗?错过一步


谢谢

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

@property (nonatomic, readwrite, assign) ECSlidingViewControllerTopViewPosition currentTopViewPosition;
然后在设置值时,确保使用属性设置器。例如,
self.currentTopViewPosition=1

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

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

UIKit不保证是KVOcompliant@danielbeard但这包括什么呢?这是uiviewcontroller子类中的自定义属性,这会取消它的资格吗?它是如何计算的?您能否显示
currentTopViewPosition
的定义位置?@danielbeard其定义如下:
@属性(非原子、赋值、只读)ECSlidingViewControllerTopViewPosition currentTopViewPosition
并且它在该类中是1或0(由常量定义),您是将该属性重新声明为
readwrite
还是直接使用ivar?好的,谢谢,所以使用它的_currentTopViewPosition设置属性只是直接设置ivar?是的,setter是自动生成并处理KVO,原子/非原子和存储器(在本例中为分配)。