2016-06-07 3 views
0

Я разрабатываю приложение Mac, в котором используются данные Core. Я использую NSOutlineView и NSTreeController для привязки данных к просмотру.Фильтрация детей NSOutlineView с помощью NSTreeController

Можно предположить структуру моих данных в

  • Родитель Пункт 1
    • ребенка Пункт 1
    • Детский Пункт 2
    • ребенка Пункт 3
  • родительского элемента 2
    • Детский Пункт 4
    • Детский Пункт 5

Я подаю на fetchPredicate к моему NSTreeController успешно фильтровать данные. С другой стороны, fetchPredicate применяется только к первому уровню данных (к родительским элементам).

Мне нужен метод, который я могу применить fetchPredicate также к дочерним элементам. Например, если мои критерии совпадения с детьми Пункт 1 и ребенка Пункт 4 результат должен быть

  • Родитель Пункт 1
    • ребенка Пункт 1
  • Родитель Пункт 2
    • Детский Пункт 4

Любая помощь будет оценена по достоинству.

+0

Так что конкретно возникает у вас на вопрос? С какой проблемой вы сталкиваетесь с проблемой фильтрации дочерних элементов? –

+0

Спасибо, что ответили. Как я уже упоминал в своем вопросе, я применяю filterPredicate к NSTreeController. Например, NSPredicate (format: due_on = <% @ ", endDate!), Но этот фильтр применяется только к родительским элементам, но не к дочерним элементам. Я по-прежнему вижу некоторые дочерние элементы, которые не соответствуют этому критерию Что мне нужно - это применить мой фильтр только ко второму уровню.Снова спасибо – emreoktem

+1

Вы применяете предикат fetch. NSTreeController не поддерживает предикат фильтра. NSTreeController извлекает объекты верхнего уровня и использует дочерние отношения для получения дети.Если вы хотите отфильтровать детей, вам нужно выполнить некоторые программы. – Willeke

ответ

0

Вы применяете предикат выборки. NSTreeController не поддерживает предикат фильтра. NSTreeController использует предикат выборки для извлечения объектов верхнего уровня и использует дочерние отношения для получения дочерних элементов. Дети не получаются, и предикат выборки не используется для получения детей.

Решение 1: реализовать вычисляемое свойство filteredChildren, как в этом вопросе: Filtering A Tree Controller и упоминается в этом несвязанной ответ: Is it possible to bind an NSTreeController to an NSOutlineViewDataSource?

Решение 2: использовать источник данных вместо привязки, также упоминается в ответе выше.

+0

Решение 1 идеально. благодаря – emreoktem