NSOutlineView - объединение нескольких источников - PullRequest
1 голос
/ 11 ноября 2010

В моем приложении у меня есть NSOutlineView, который получает свои данные от NSTreeController - который, в свою очередь, получает их из модели Core Data.

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

Вашпомощь очень ценится.Я чувствую, что упускаю что-то очевидное здесь ...

1 Ответ

4 голосов
/ 14 ноября 2010

Что бы вы сделали здесь, это написали собственный подкласс NSTreeController. Вот почему это идеальное место для изменений, которые вы хотите сделать:

  • Это не в модели, как вы сказали.
  • Не имеет ничего общего с видом - полностью прозрачный.
  • По сути, вам нужно создать отображаемые данные из сохраненных данных <- это задача контроллера. </li>

К счастью, классы Controller в Какао очень мощные и в то же время очень простые. Для вас должно быть достаточно переопределить метод -arrangedObjects. Повторно используйте реализацию по умолчанию, поскольку она делает много полезных вещей, таких как применение предикатов или сортировка. Вот как это может выглядеть:

- (id)arrangedObjects {
  id root = [super arrangedObjects];

  // "root" is something like a NSTreeNode but not quite yet
  NSTreeNode *newRoot = [NSTreeNode treeNodeWithRepresentedObject: nil];
  [[newRoot mutableChildNodes] setArray: [root childNodes]];

  // Do your customizations here

  return newRoot;
}

Возвращаемый объект относится к классу NSTreeNode - см. Документацию по внесению изменений.

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