2010-04-23 2 views
1

Есть ли общий способ разложения выражения, созданного [NSPredicate predicateWithFormat], на объекты NSComprasionPredicate, NSExpression и другие?Как разложить NSPredicate на компоненты?

Для примера ниже необходимо разобрать компоненты.

[NSPredicate predicateWithFormat:@"(0 != SUBQUERY(collection, $x, $x.name == "Name")[email protected])"]; 

ответ

2

+[NSPredicate predicateWithFormat:] на самом деле передний конец для довольно сложного синтаксического анализатора. Если вы заинтересуете полученный результат NSPredicate, вы обнаружите, что на самом деле это не NSPredicate, но либо NSComparisonPredicate, либо NSCompoundPredicate.

Оба эти типа предикатов имеют множество удобных методов для удобной интроспекции.

Иными словами: NSPredicate на самом деле является «абстрактным» классом. Обычно вы будете иметь дело только со сравнительными или сложными предикатами. Существуют и другие виды, такие как NSBlockPredicate, но все они недокументированы.

+1

Звучит как кластер классов для меня, например, NSString и коллекции Cocoa. –

+0

Я могу себе представить, как создать предикат с predicateWithFormat. Но я не могу создать предикат (в моем вопросе), используя набор объектов, таких как NSExpression, NSComparisonPredicate, NSCompoundPredicate. – Victor

Смежные вопросы