Добавление дочернего объекта с использованием NSTreeController / NSOutlineView - PullRequest
2 голосов
/ 19 сентября 2010

В моем приложении, как и во многих приложениях Mac, у меня есть список источников. На данный момент это NSOutlineView, связанный с NSTreeController. Я могу довольно легко добавлять элементы к нему, и даже смог дублировать внешний вид «списка источников» с серыми заголовками всех заглавных букв и всем. Есть кое-что, что уклоняется от меня, и это сводит меня с ума.

Как можно добавить ребенка в определенный элемент дерева? Например, допустим, я создал предмет под названием «Сыр». Я уже добавил двоих детей в сыр, названный "Чеддер" и "Швейцарский". Как я могу добавить «Longhorn Colby» в список детей теперь, когда мой метод начального добавления завершен?

Я гуглил, но не могу найти простой, прямой ответ. Из того, что я вижу, однако, это излишне сложно и похоже на требование конгресса сделать что-то столь же простое, как завтрак. Пожалуйста, поправьте меня, если я ошибаюсь.

Обновление:

Я не верю, что использую подтипы. До сих пор вот как я заполнял свое дерево:

[treeController addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                               [NSNumber numberWithBool:YES], @"isSourceGroup",
                               @"CHEESE", @"name",
                               [NSArray arrayWithObjects:
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                 @"Cheddar", @"name",
                                 nil],
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                 @"Swiss", @"name",
                                 nil],
                                nil], @"children",
                               nil]];

Бит isSourceGroup используется для обозначения того, что этот элемент является одним из заголовков в виде структуры.

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Попробуйте изменить это NSArray на NSMutableArray, а затем:

[treeController insertObject:longhornColbyDict atArrangedObjectIndexPath:[[NSIndexPath indexPathWithIndex:0] indexPathByAddingIndex:0]];
1 голос
/ 19 сентября 2010

Предполагая, что у каждого TypeOfFood есть свойство subtypes, содержащее массив, и что это свойство задается в контроллере дерева в качестве пути ключа дочерних узлов, отправьте сообщение типа сыра Cheese типа insertObject:inSubtypesAtIndex:. (Вам необходимо реализовать этот метод доступа в классе TypeOfFood.)

Поскольку это средство доступа, совместимое с KVC, KVO обернет его, когда контроллер дерева начнет наблюдать за свойством, что означает, что отправки сообщения средства доступа должно быть достаточно, чтобы отключить правильные уведомления и вызвать правильные побочные эффекты, а именно обновление контроллер и вид.

Однако я не использовал NSTreeController, поэтому вполне возможно, что я пропустил некоторые его аспекты, которые делают этот ответ фальшивым. Пожалуйста, попробуйте и прокомментируйте все, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...