Я загружаю свои дочерние узлы в следующем вызове в NSOutlineViewDataSource
:
func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
guard let node = item as? Node else { return false }
return node.children.count > 0
}
Свойство children
моего класса Node
является ленивым и, следовательно, принудительно загружается здесь.
Этот метод вызывается только на узлах, которые видны в планировщике. Таким образом, вы загружаете только один слой перед видимым деревом. Треугольник раскрытия (стрелка раскрытия) будет виден, если дочерние элементы существуют.
Если у вас есть эффективный способ узнать количество дочерних элементов, которые есть у узла, без их фактической загрузки, то может быть лучше просто вернуть число детей в outlineView(_: isItemExpandable:)
и затем фактическая нагрузка в outlineViewItemWillExpand(_:)
, как предложил Виллек в комментариях.