我开始学习objective-c,我的第一个应用程序很简单。我创建了一个处理计时器的类。它有一个属性currentTime,一个startAndPause方法和一个stopTimer方法。
我正在我的ViewController的viewDidLoad方法中初始化我的Timer:
_minu = [[KUUMinuteur alloc] initWithDuration:@70];
然后,我希望我的ViewController观察我的_minu.currentTime属性更改。所以我这样做了:
[_minu addObserver:self forKeyPath:@"currentTime" options:NSKeyValueObservingOptionNew context:NULL];
在我的viewController中,我编写了这个方法,但它永远不会触发:
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
NSLog(@"Changing !!");
}
我不知道我做错了什么。 :(
(我的应用程序是一个单一的View应用程序。)
编辑:忘记将tempsPublic翻译为currentTime
答案 0 :(得分:2)
您可能永远不会更改currentTime
的{{1}}属性。
我想知道您是否正在尝试直接更新支持KUUMinuteur
财产的_currentTime
ivar。更改属性值时,您不想使用ivar(currentTime
,init
和自定义setter方法除外):
dealloc
您想使用setter,例如
_currentTime = ...; // wrong
或
self.currentTime = ...; // right
确保使用setter,否则不会发生键值通知。
请参阅高级内存管理编程指南的Use Accessor Methods to Set Property Values部分。或参阅键值观察编程指南的Automatic Change Notification部分。
答案 1 :(得分:0)
[_minu addObserver:self forKeyPath:@"currentTime" options:NSKeyValueObservingOptionNew context:NULL];
应该是currentTime
而不是tempsPublic
。