Неполадка:
У меня есть NSOutlineView с каждым tableColumn, программно связанным с упорядоченными объектами NSTreeController, поэтому нет необходимости связывать selectionIndexPaths.Источник упорядоченных объектов NSTreeController представляет собой изменяемый массив.Я добавляю все узлы в NSTreeController динамически, выполняя - (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath;
в основном потоке.Я переопределил событие mouseDown в NSOutlineView следующим образом: - (void)mouseDown:(NSEvent *)event { /*...myMethods...*/ [super mouseDown:event]; }
Проблема:
Когда узлы добавляются очень быстро, и я выполняю событие mouseDown для outlineView, затем очень частопроисходит следующая ситуация:
поток, который добавляет узлы в TreeController, прерывает последовательность (я полагаю), вызванную событием mouseDown, поэтому insertObject: atArrangedObjectIndexPath:
вызывается до setSelectionIndexPaths:
.Вот почему новый выбор в outlineView исчезает, а treeController все еще имеет старую версию selectedIndexPaths .
Я попробовал одно частичное решение: заблокировал мой метод insertObject:
(с @synthesized(outlineView)
)так что он не может изменить весь outlineView, но он часто возникает при конфликте потоков и зависании приложения.
Есть ли идеи, как решить проблему с исчезающими выделениями?