2016-12-06 10 views
0

Я пишу панель системных настроек для Mac OS X в Objective-C. Панель включает в себя NSOutlineView, связанный с правильно настроенной NSTreeController. Я также добавил класс делегата для моего OutlineView, в котором я определил свой собственный метод outlineView:viewForTableColumn:item:.Как добавить NSOutlineViewDataSource в мой NSOutlineView?

enter image description here

При добавлении новых объектов в весь контроллере дерева прекрасно работает, но теперь я хочу, чтобы включить persistence for expanded items. Для этого мне нужно реализовать outlineView:itemForPersistentObject: и outlineView:persistentObjectForItem: в качестве источника данных для OutlineView, в противном случае я получаю ошибку:

*** NSOutlineView data source ((null)) does not implement outlineView:persistentObjectForItem:

Как мне это сделать с учетом моей текущей настройки?

ответ

1

Делегат и источник данных могут быть одним и тем же объектом. Внедрите методы в OutlineViewDelegate и подключите источник данных к тому же объекту, что и делегат.

+0

Я уже пробовал это до публикации, но почему-то элементы моего контура больше не появлялись. – Maurizio

+0

О, неважно, сейчас работает. Должно быть, я ошибся. – Maurizio

1

Вы объявили этот класс (класс, предоставляющий данные) как NSOutlineViewDataSource? Что-то вдоль этих линий:

@interface YourClass : NSObject <NSApplicationDelegate, NSWindowDelegate, NSUserNotificationCenterDelegate, NSTableViewDataSource, NSTableViewDelegate, NSOutlineViewDataSource, NSOpenSavePanelDelegate>

* Другие заявления являются лишь примерами, в данном конкретном случае YourClass наследует от нескольких других.

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

+0

Я этого не сделал, но теперь я добавил '' в класс 'myNode' и определил два метода в своей реализации. Затем я создал новый объект класса 'myNode' в Interface Builder и настроил его как контент для OutlineView. Кажется, это трюк. Я буду продолжать работать над этим и пометить ответ как правильный, если это так. – Maurizio