Как многие из вас могут знать, NSTreeController, связанный с контурным представлением, может отображать дубликаты при представлении основных объектов данных.
Временное решение состоит в добавлении 'parent == nil' к предикатам, но это только возвращает родительские объекты.Если, например, пользователь ищет подобъект, запрошенный подобъект не будет отображаться.
(предлагаемое) решение - создать подкласс NSTreeController и добавить переменную NSMutableSet, которая отслеживаетобъектов, которые в настоящее время отображаются.Эта переменная должна быть выделена в init и освобождена в dealloc.
Когда вызывается «fetchWithRequest: merge: error:», набор должен быть очищен (я не уверен, будет ли это более эффективным, чем освобождениеэто и распределение его снова).Каждый раз, когда сущность будет добавлена к отображению, проверьте, содержит ли ее набор.Если это не так, добавьте его.В противном случае найдите, который ближе к корню (который представляет собой подзаголовок), или пропустите его, если он является подзаголовком, или поменяйте его местами с ранее включенным.учитывая NSSet использует хеширование).У меня проблема в том, чтобы найти правильный метод для переопределения, чтобы добавить это поведение.В частности, когда NSTreeController обрабатывает извлеченные объекты после вызова «fetchWithRequest: merge: error:».