2

私は NSTreeController (コンテンツを NSOutlineView に提供する) を持っています。トップレベルのオブジェクトを 1 つのクラスにし、他のすべてのオブジェクト (つまり、任意のレベルの子) を別のクラスにしたいと考えています。これについて最善の方法は何ですか?

少なくともaddaddChildinsert、およびの動作をどうにかして変更する必要がinsertChildあると思います。ただし、4 つの別々の方法を変更するのではなく、1 つの場所だけでこれを説明する簡単な方法を見つけたいと思っていました。

4

2 に答える 2

0

オブジェクトに属性を作成して、変更したメソッドを使用するオブジェクトと使用しないオブジェクトを区別できるように思えます。次に、サブクラス化されたメソッドでその属性をテストするための単純なifステートメントを配置します。オブジェクトに属性がない場合は、スーパークラスツリーコントローラーに属性を処理させます。それ以外の場合は、動作を変更します。

于 2010-04-02T23:35:34.097 に答える
0

これは機能し、機能を書き直す必要はありませんでした。

- (void)insertChild:(id)sender
{
    if ([self selectionIndexPath])
    {
        [self setObjectClass:[IRGroup class]];
        [super insertChild:sender];
    }
    else
    {
        [self setObjectClass:[IRFloor class]];
        [super insertChild:sender];
    }
}

簡単ではありませんでした。newObjectApple のドキュメントでは、兄弟子を挿入するときに呼び出されると主張しているため、オーバーライドを試みましたが、私のテストでは、兄弟を挿入するときにのみ呼び出されることがわかりました。

于 2010-04-05T19:57:18.157 に答える