2011-05-26 11 views
2

私は私の財産(アーティスト)@synthesize場合は、すべてがキーパスartist.name このキー値に準拠していますか?

  • コール[このmyobjのsetValue:newArtist forKey: "アーティスト" @]のためにオブザーバーを追加

    1. 正常に動作します。
    2. 成功。

      - (void)setArtist:(GVArtist *)artist 
      { 
          GVArtist *oldArtist = _artist; 
      
          [self willChangeValueForKey:@"artist"]; 
          _artist = [artist retain]; 
          [self didChangeValueForKey:@"artist"]; 
      
          [oldArtist release]; 
      } 
      

      と、再びそれを行う、私が手::

    3. 私はこれとsetterメソッドをオーバーライドする場合

    は、キーパス「artist.name」のためのオブザーバーのため更新できませんから、ほとんどのKVOの適切な通知が送信されずにキー「アーティスト」の値が変更されたためです。 MyObjectクラスのKVO準拠を確認します。

    いいですね。

  • 答えて

    4

    willChangeValueForKey:didChangeValueForKey:のものは必要ありません。あなたのセッターの名前がKVOに準拠している限り自動的に処理されます(-setArtist:です)。myObjにオブザーバーを登録すると、Cocoaはオブジェクトのサブクラスを動的に作成し、willChangeValueForKey:didChangeValueForKey:の呼び出しを自動的に追加します。だからあなたのセッターがそれらを手動で行う必要はなく、あなたの問題を引き起こしているかもしれません。

    +0

    ARG!脳のおなら。あなたはまったく正しい。私はそれを配列のために実装する必要があります。 willChange:valuesAtIndexes:forKey: – joels

    関連する問題