2

私のモデルは次のようになります。

モデル

私のテスト プロジェクトでは、次の 2 つの方法があります。

- (void) addChildWithName:(NSString*)name toParent:(Item*)parent
{
    static NSUInteger count = 1;

    Item*   childItem;


    childItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:[self managedObjectContext]];
    [childItem setName:[NSString stringWithFormat:@"%@ %lu", name, count]];
    [childItem setParent:parent];

    count++;
}



- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
    [super windowControllerDidLoadNib:aController];
    // Add any code here that needs to be executed once the windowController has loaded the document's window.


    Item*   rootItem;

    rootItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:[self managedObjectContext]];
    [rootItem setName:@"rootItem"];

    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
}

これにより、次のようなアウトライン ビューが表示されます。

結果

xib のツリー コントローラー オブジェクトでは、Children Key Path を「children」に設定しました。管理オブジェクト コンテキスト (moc) は、ファイル所有者の moc にバインドされます。アウトライン ビューのテーブル列の値は、「名前」のモデル キー パスを持つ NSTreeController の ArrangeObjects にバインドされています。

ご覧のとおり、ルート アイテムの下にのみ表示されるはずの子アイテムのエントリが重複しています。

私は何を間違っていますか?

サンプル プロジェクトは、サンプル プロジェクトのリンクにあります。

ありがとうございました。

4

1 に答える 1

2

アレイコントローラには、属性がnilItemの場合にのみオブジェクトを選択するための「フェッチ述語」が必要です。parentparent == nil

于 2013-02-03T22:05:42.737 に答える