Я не уверен, что то, что вы хотите сделать, возможно с помощью простого единственного предиката.Если это дерево и вы используете предикат для получения узлов, вам нужно и написать метод, который будет проходить вверх и возвращать BOOL, указывающий, следует ли его удалить или нет.
Затем простополучите ваши узлы и поместите их в NSMutableArray и выполните
for (int i = 0; i < [results count]; i++)
{
if ([self shouldBeRemoved:[results objectAtIndex:i]])
{
[results removeObjectAtIndex:i];
i--;
}
}
Ваш shouldBeRemoved: метод должен быть довольно простым рекурсивным методом.