NSOutlineView - reloadItem: reloadChildren: сбой моего приложения - PullRequest
1 голос
/ 10 сентября 2009

Я пытаюсь перезагрузить определенный элемент в моем виде структуры, используя функцию reloadItem или reloaditem:reloadchildren в NSoutlineView, но это приводит к сбою всего моего приложения. подскажите, пожалуйста, как обойти это, я тоже пытался свернуть этот элемент и снова развернуть его, но он не перезагружает этот элемент и его дочерние элементы.

Сейчас я делаю следующее:

  1. Я вручную сохраняю состояние моего контурного вида с помощью цикла for и сохраняю элемент, если он находится в развернутом состоянии или нет.

  2. Вызов функции reloadData NSOutlineView

  3. Затем, используя сохраненное состояние, запустите цикл for, чтобы развернуть все ранее раскрытые элементы.

Но этот метод сильно снижает производительность. Есть ли другое решение для этого метода?

Есть ли какой-нибудь метод для автоматического сохранения состояния вида контура, его перезагрузки и повторной установки этого состояния? что делают эти методы autosaveExpandedItems и setautosaveExpandedItems?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 ноября 2011

возможно проблема с синхронизацией, попробуйте использовать NSLock или @synchronize вокруг reloadItem. Можете приложить какой-нибудь источник к этой проблеме, пожалуйста?

0 голосов
/ 12 сентября 2009

Это обычное поведение в 10.6, если вы пытаетесь перезагрузить узел во время процесса перезагрузки.

Этот метод (или некоторые более глубокие связанные методы) был улучшен для 10.6. На самом деле существует NSAssert, но он ощущается как сбой при загрузке узла в awakeFromNib при запуске из-за утечки правильного обработчика исключений, который обрабатывает «исключение несогласованности».

...