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