NSOutlineview странное поведение - PullRequest
0 голосов
/ 31 марта 2019

Прошу прощения за расплывчатое название, но, честно говоря, я не знаю, как лучше его выразить.В настоящее время я пытаюсь создать простой NSOutlineView.Идея состоит в том, чтобы некоторые города были отсортированы по штатам.Ниже показано, как должен выглядеть NSOutlineView Correct Layout

Теперь, как вы можете видеть, в одном расширяемом элементе может быть много дочерних элементов.Проблема в том, что после открытия и закрытия некоторых состояний появляются пустые строки, а некоторые города помещаются в случайные места или даже исчезают, как показано на следующем рисунке: Incorrect Layout

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

Я видел похожие вопросы, где они рекомендовали отключить Floats Group Rows, что я и сделал, но ничего не изменилось.

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

1 Ответ

0 голосов
/ 02 апреля 2019

Хорошо, я нашел решение для любого в будущем с подобными проблемами. В яблочных документах указано:

Важно

Вполне возможно, что ваши источники данных для заполнения представление схемы может быть вызвано перед awakeFromNib (), если источник данных указано в Интерфейсном Разработчике. Вы должны защищаться от этого путем имеющий метод outlineView источника данных (_: numberOfChildrenOfItem :) вернуть 0 для количества элементов, когда источник данных еще не был сконфигурировано. В awakeFromNib (), когда источник данных инициализируется, вы всегда должен вызывать reloadData ().

Поэтому я назвал reloadData() в awakeFromNib(), однако проблема заключалась в том, что awakeFromNib() вызывался несколько раз, когда вы расширяете элемент, эти множественные перезагрузки вызывали проблему с отображением элементов, поэтому мое решение было просто удалить reloadData() из awakeFromNib()

...