Как использовать NSBrowserDelegate методы для представления дерева данных

Я пытаюсь представить словарь JSON в NSBrowser на OS X 10.11. У меня есть словарь, который содержит члены или строковые значения, массивы строковых значений или словари того же.

В func rootItemForBrowser(browser: NSBrowser) -> AnyObject? Я предоставляю свой словарь.

В func browser(browser: NSBrowser, numberOfChildrenOfItem item: AnyObject?) -> Int Я возвращаю количество объектов в дочернем массиве или словаре.

Я путаюсь с тем, как использовать func browser(browser: NSBrowser, child index: Int, ofItem item: AnyObject?) -> AnyObject, Возвращаемое значение здесь заканчивается тем, что является строковым значением одного из членов, что является ключом к большему количеству данных. Но когда я выбираю этого потомка, у меня просто есть родительская строка для работы. Мне нужен полный путь того, что пользователь выбрал до сих пор, чтобы на самом деле обойти словарь.

Я пытался смотреть на path() метод NSBrowser но это вызывает бесконечный цикл в этих методах делегатов. Я смотрю на такие приложения, как Finder, и мне интересно, как они достигают пути, как я хочу.

1 ответ

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

Например:

class DictionaryItem {
    let name: String
    var children: [DictionaryItem]? 
    var rawData: AnyObject?

    init(name: String) {
        self.name = name
    }
}

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

Другие вопросы по тегам