我开始学习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
最佳答案
您可能永远不会更改currentTime
的KUUMinuteur
属性。
我想知道您是否尝试直接更新支持_currentTime
属性的currentTime
ivar。更改属性的值时,您不想使用ivar(init
,dealloc
和自定义setter方法(如果有)除外):
_currentTime = ...; // wrong
您想使用设置器,例如
self.currentTime = ...; // right
要么
[self setCurrentTime:...]; // right
确保使用设置器,否则键值通知将不会发生。
请参阅《高级内存管理编程指南》的Use Accessor Methods to Set Property Values部分。或参阅《键值观察编程指南》的Automatic Change Notification部分。