Сначала я извиняюсь за длину, но хочу убедиться, что получаю достаточно информации.У меня есть интересная проблема, которая действительно не должна быть сложной.Я знаю, что если вы хотите, чтобы NSOutlineView прокручивал и отображал определенную строку, вы просто используете этот шаблон:
NSInteger row = [self.myOutlineView rowForItem:myItem];
[self.myOutlineView scrollRowToVisible:row];
Я не использую NSTreeController в пользу использования делегирования.
Я использую класс шаблона адаптера для своих данных.Адаптер упаковывает несколько различных типов.Это простая структура:
[дочерние адаптеры] ----- * [родительский адаптер]
Таким образом, адаптер заботится о подсчете дочерних элементов, может добавлять, удалять, можетрасширение и т. д., а также действует как объект переноса данных.
Итак, с этим здесь и состоит проблема.Когда я добавляю новый элемент в NSOutlineView, я начинаю с добавления нового дочернего адаптера к адаптеру, выбранному в виде структуры.Затем я перезагружаю элемент с потомками, используя:
[self.myOutlineView reloadItem:selectedAdapter reloadChildren:YES];
Затем я отображаю представление для этого объекта и пытаюсь синхронизировать NSOutlineView, чтобы выбранная строка соотносилась с вновь отображаемым представлением.Таким образом, в простой форме выполняются следующие шаги:
- Сначала загрузите NSOutlineView с данными, используя протокол NSOutlineDataSource
- Пользователь выбирает элемент (адаптер), который может добавлять дочерние элементы
- Пользователь нажимает кнопку «Добавить»
- Создается новый пустой представленный объект
- Новый представленный объект оборачивается в адаптер
- Недавно созданный адаптер добавляется впотомки выбранного адаптера
- Новое представление создается с использованием нового представленного объекта и отображается
- Выбранный (родительский) узел и его дочерние элементы перезагружаются в NSOutlineView
- .вновь созданная строка в NSOutlineView прокручивается для просмотра, который синхронизирует представление и выбор NSOutlineView
Так что здесь проблема.NSOutlineView не найдет вновь добавленный элемент, если вы используете метод rowForItem.Однако после перезагрузки я могу развернуть родительский узел и выбрать только что добавленный элемент, и все работает нормально.В попытке решить проблему, я программно развернул родительский узел (открывая новый элемент), затем попытался прокрутить до нового элемента, и он все еще не может найти строку.RowForItem возвращает -1.
Я что-то пропустил при добавлении нового элемента, который не обновляется в NSOutlineView?Я безуспешно пробовал много разных вещей, и любая помощь будет с благодарностью.
Заранее спасибо, Роб