ViewController观察对象属性不起作用

时间:2014-03-11 14:26:59

标签: ios objective-c key-value-observing

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

2 个答案:

答案 0 :(得分:2)

您可能永远不会更改currentTime的{​​{1}}属性。

我想知道您是否正在尝试直接更新支持KUUMinuteur财产的_currentTime ivar。更改属性值时,您不想使用ivar(currentTimeinit和自定义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