KVO:显然,相同的“有效”keyPath会产生不同的结果

时间:2012-08-10 20:35:25

标签: iphone objective-c ios cocoa-touch key-value-observing

我一直在努力设置KVO几个小时,我设法让它工作:

这有效:

 [self addObserver:self forKeyPath:@"session.loginState" options:0 context:nil];

这不是:

 [self addObserver:self.session forKeyPath:@"loginState" options:0 context:nil];

请注意,self.session懒惰地创建一个空的Session对象,因此self.session永远不会nil。但是,似乎:

  1. session.loginState的关键路径self与...
  2. 不同
  3. 来自KVO视角的loginState的密钥路径self.session
  4. 为什么会这样?

2 个答案:

答案 0 :(得分:3)

你有观察者和观察者倒退。尝试

[self.session addObserver:self forKeyPath:@"loginState" options:0 context:nil];

答案 1 :(得分:1)

使用此代码:

 [self addObserver:self forKeyPath:@"session.loginState" options:0 context:nil];

您正在添加自己作为self的关键路径session.loginState的观察者,实际上是self.session.loginState

在此代码中:

 [self addObserver:self.session forKeyPath:@"loginState" options:0 context:nil];

您正在添加self.session作为self的关键路径loginState的观察者,实际上是self.loginState