Reputation: 22959
I have struggled with the setup of KVO for a few hours and I managed to get it to work:
This works:
[self addObserver:self forKeyPath:@"session.loginState" options:0 context:nil];
This doesn't:
[self addObserver:self.session forKeyPath:@"loginState" options:0 context:nil];
Please note that self.session
lazily creates an empty Session
object so self.session is never nil
. However, it seems that:
session.loginState
of self
is not the same as...loginState
of self.session
from a KVO perspectiveWhy is this the case?
Upvotes: 0
Views: 222
Reputation: 5316
With this code:
[self addObserver:self forKeyPath:@"session.loginState" options:0 context:nil];
You are adding self as an observer of self
's keypath session.loginState
, that is effectively self.session.loginState
.
In this code:
[self addObserver:self.session forKeyPath:@"loginState" options:0 context:nil];
You are adding self.session
as an observer of self
's keypath loginState
, that is effectively self.loginState
.
Upvotes: 1
Reputation: 185871
You have your observer and observee backwards. Try
[self.session addObserver:self forKeyPath:@"loginState" options:0 context:nil];
Upvotes: 3