0

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 は never であることに注意してくださいnil。ただし、次のようです。

  1. のキーパスsession.loginStateself...と同じではありません
  2. KVO の観点からloginStateのキーパスself.session

これはなぜですか?

4

2 に答える 2

3

あなたにはオブザーバーがいて、後ろ向きに観察します。試す

[self.session addObserver:self forKeyPath:@"loginState" options:0 context:nil];
于 2012-08-10T20:43:50.413 に答える
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オブザーバーとして追加しています。これは効果的です。selfloginStateself.loginState

于 2012-08-10T21:07:32.520 に答える