我开始学习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

最佳答案

您可能永远不会更改currentTimeKUUMinuteur属性。

我想知道您是否尝试直接更新支持_currentTime属性的currentTime ivar。更改属性的值时,您不想使用ivar(initdealloc和自定义setter方法(如果有)除外):

_currentTime = ...;  // wrong

您想使用设置器,例如
self.currentTime = ...; // right

要么
[self setCurrentTime:...]; // right

确保使用设置器,否则键值通知将不会发生。

请参阅《高级内存管理编程指南》的Use Accessor Methods to Set Property Values部分。或参阅《键值观察编程指南》的Automatic Change Notification部分。

10-08 05:49
查看更多