NSPredicate性能比较,很慢
我有一个NSPredicade它看起来像NSPredicate性能比较,很慢
NSPredicate *谓词= [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)“];
但是表现非常慢。有没有办法让它更容易和更快?
首先,可以简化您的谓词是这样的:
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:
@"[email protected] > 0 AND \
(strasse.checks CONTAINS YES OR [email protected] > 0) OR \
strasse.standort.ortcheck CONTAINS NO"];
如果我尝试你的第一个简化,谓词不会过滤任何东西。如果我尝试第二个xcode引发异常:不受支持的函数表达式raumattribute.schalter [SIZE] – Bashud 2012-04-05 10:34:32
我用'@ count'替换了'[SIZE]'。我认为它应该解决这个例外。 – 2012-04-05 15:01:35
是有使用字符串属性而不是整数/布尔值的特殊原因? “strasse.checks”,“raumattribute.schalter”和“strasse.standort.ortcheck”的可能值是多少? – 2012-04-05 08:56:38
strasse.checks,raumattribute.schalter和strasse.standort.ortcheck是NSSet的bool值 – Bashud 2012-04-05 09:03:08
你在哪些谓词上运行?一个提取请求或一个对象数组?该阵列来自哪里? – 2012-04-05 15:04:26