Предикат не работает с двумя операторами @count - PullRequest
0 голосов
/ 28 августа 2011

Этот код назначает предикат для NSFetchRequest для объекта, который имеет два отношения один ко многим (collectionA и collectionB):

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"(collectionA.@count > 0 ) OR (collectionB.@count > 0)" ]];

Но этот предикат не работает, и все объектывыбран.Если я изменю эту строку на другую:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"collectionA.@count > 0" ]];

, тогда она будет работать, как ожидается, и вернет все объекты с хотя бы одним элементом в collectionA.То же самое для коллекции.Но поскольку я пытаюсь выполнить операцию ИЛИ, чтобы получить комбинацию обоих, тогда она не фильтрует ни один объект, как если бы предикат был проигнорирован.не может использоваться в одном и том же предикате.Как мне написать предикат, чтобы получить результаты объектов с любым элементом в collectionA или collectionB?

Заранее спасибо.

1 Ответ

1 голос
/ 30 августа 2011

Я не знаю причин, по которым два оператора @count не могли бы работать в одном и том же предикате.Иногда вы сталкиваетесь с странными проблемами с predicateWithFormat.Я бы предложил создать два отдельных предиката, а затем объединить их с:

-[NSCompoundPredicate orPredicateWithSubpredicates];

… создание составного предиката напрямую, вместо того, чтобы полагаться на синтаксический анализатор, часто решает проблему такого типа.

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

...