1

私は、KVCメカニズムが、相互に逆の関係である関係プロパティを処理するときに何らかの助けを提供するかどうかを理解しようとしています。考案された標準的な部門/従業員の例を使用します。

@interface Department : NSObject {
      NSMutableArray *employees;
}
@property (retain) NSMutableArray *employees;
// KVC methods for mutating the employees array

@end


@interface Employee : NSObject {
    Department *department;
}
@property (retain) Department *department;

これだけ(および省略されたKVC収集メソッド)で、KVCは両方向の関係を管理するためにどのようなヘルプを提供しますか?私は今、概念的な段階にあります。Core Dataを使用すると、明示的な逆の関係を設定できるため、を使用する[myDepartment insertObject:newEmployee inEmployeesAtIndex:lastIndex];newEmployee.department自動的にに設定されmyDepartmentますが、KVCとランタイムのみでこれを実現できますか、それともCore Dataが必要ですか?

助けてくれてありがとう。

編集やや無関係ですが、重要です。私のコードでは、従業員のプロパティを部門にあるものとして配置しましretainたが、これによって保持サイクルが発生するかどうか疑問に思っていますか?

4

1 に答える 1

1

Key-Valueコーディングには、逆の関係を維持するのに役立つものは何もありません。ただし、Key- ValueObservingを活用してこれを行うことができます。

あなたがしたい主なことは次のとおりです。

  • エンティティクラスに対してNSObjectを直接サブクラス化するのではなく、NSManagedObjectと同等の独自のクラスを実装します。結局のところ、任意のNSObjectサブクラスが思いついたシステムで機能することを保証することはできません。(または、必要なものすべてをプロトコルに体系化することもできます。EOFはEOEnterpriseObjectプロトコルを使用してこれを行いました。)
  • NSManagedObjectContextと同等の独自のクラスを実装して、エンティティクラスのインスタンスの監視を処理し、適切なタイミングで逆メンテナンスを実行するように指示できるようにします。KVOによってトリガーされる逆メンテナンスは、逆メンテナンスなどをトリガーするKVOを再トリガーする必要がないことに注意してください。
  • NSManagedObjectModelに相当する独自のクラス階層を実装して、NSManagedObjectContextに相当するものが、エンティティクラスのインスタンスのどのプロパティが逆の関係を持つことができるか、およびそれらが何であるかを認識できるようにします。

これらすべてを考慮すると、Core Dataを使用することをお勧めします。これは、Core Dataがすでにすべてを実行しており、何年にもわたって非常にうまく機能するように大幅に調整されているためです。

于 2010-07-19T05:05:47.137 に答える