0

次のようなNSPredicateがあります

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"((strasse.checks CONTAINS [cd] YES) AND (raumattribute.schalter CONTAINS[cd] YES)) OR ((strasse.standort.ortcheck CONTAINS [cd] YES) AND (raumattribute.schalter CONTAINS[cd] YES)) OR ((strasse.standort.ortcheck CONTAINS [cd] YES) AND(raumattribute.schalter CONTAINS[cd] NO) OR (strasse.checks CONTAINS [cd] YES) AND (raumattribute.schalter CONTAINS[cd] NO)) OR (strasse.standort.ortcheck CONTAINS [cd] NO)"];

しかし、パフォーマンスは非常に遅いです。それをより簡単かつ迅速にする方法はありますか?

4

1 に答える 1

0

まず、述語を次のように簡略化できます。

NSPredicate *predicate =
[NSPredicate predicateWithFormat:
 @"(raumattribute.schalter CONTAINS YES OR raumattribute.schalter CONTAINS NO) AND \
 (strasse.checks CONTAINS YES OR strasse.standort.ortcheck CONTAINS YES) OR \
 strasse.standort.ortcheck CONTAINS NO"];

次に、ブール値のみを想定raumattribute.schalterして含めると、述語を再び単純化できます。strasse.standort.ortcheck

NSPredicate *predicate =
[NSPredicate predicateWithFormat:
 @"raumattribute.schalter.@count > 0 AND \
 (strasse.checks CONTAINS YES OR strasse.standort.ortcheck.@count > 0) OR \
 strasse.standort.ortcheck CONTAINS NO"];
于 2012-04-05T09:29:44.530 に答える