2010-04-23 52 views
1

是否有任何常見的方式來分解由[NSPredicate predicateWithFormat]創建的表達式到對象NSComprasionPredicate,NSExpression和其他?如何將NSPredicate分解爲組件?

以下示例需要拆卸爲組件。

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

回答

2

+[NSPredicate predicateWithFormat:]實際上是一個相當複雜的解析器的前端。如果您反思生成的NSPredicate,您會發現它實際上不是NSPredicate,而是NSComparisonPredicateNSCompoundPredicate

這兩種謂詞都有很多便利的方法來方便內省。

換句話說:NSPredicate實際上是一個「抽象」類。通常你只會處理比較或複合謂詞。還有其他種類,如NSBlockPredicate,但它們都沒有記錄。

+1

聽起來像是類集羣,就像NSString和Cocoa集合。 – 2010-04-29 22:23:37

+0

我可以想象如何用predicateWithFormat創建謂詞。但我無法使用NSExpression,NSComparisonPredicate,NSCompoundPredicate等一組對象創建謂詞(在我的問題中)。 – Victor 2010-05-01 01:06:14