我想将KVO通知添加到控制器的某个属性中,这样只要该属性发生更改,就会在同一个控制器中调用 observeValueForKeyPath 方法。这就是我想要的做:
@interface ViewController ()
@property(strong, nonatomic)NSString *currentState;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_currentState = @"Active";
[self addObserver:self forKeyPath:@"currentState" options:NSKeyValueObservingOptionNew context:NULL];
}
-(IBAction)changeState:(UIButton *)sender{
if([_currentState isEqualToString:@"Active"])
_currentState = @"Inactive";
else
_currentState = @"Active";
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString: @"currentState"]) {
NSLog(@"State Changed : %@",_currentState);
}
但是这个方法在按钮点击时根本没有调用observeValueForKeyPath。我在其上搜索了更多的例子,但是他们都使用了两个不同类的对象来演示它。 我的问题是:
任何帮助将不胜感激。
答案 0 :(得分:2)
由于您直接修改了实例变量,因此未触发通知, 而不是使用属性访问器方法:
-(IBAction)changeState:(UIButton *)sender{
if([self.currentState isEqualToString:@"Active"])
self.currentState = @"Inactive";
else
self.currentState = @"Active";
}