Как использовать 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
}
}
Пройдите по словарю и добавьте эти объекты в массив, который браузер будет использовать в качестве источника данных.