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)“];

但是表现非常慢。有没有办法让它更容易和更快?

+0

是有使用字符串属性而不是整数/布尔值的特殊原因? “strasse.checks”,“raumattribute.schalter”和“strasse.standort.ortcheck”的可能值是多少? – 2012-04-05 08:56:38

+0

strasse.checks,raumattribute.schalter和strasse.standort.ortcheck是NSSet的bool值 – Bashud 2012-04-05 09:03:08

+0

你在哪些谓词上运行?一个提取请求或一个对象数组?该阵列来自哪里? – 2012-04-05 15:04:26

首先,可以简化您的谓词是这样的:

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.schalterstrasse.standort.ortcheck只包含布尔值,我们可以再简化一下谓词:

NSPredicate *predicate = 
[NSPredicate predicateWithFormat: 
@"[email protected] > 0 AND \ 
(strasse.checks CONTAINS YES OR [email protected] > 0) OR \ 
strasse.standort.ortcheck CONTAINS NO"]; 
+0

如果我尝试你的第一个简化,谓词不会过滤任何东西。如果我尝试第二个xcode引发异常:不受支持的函数表达式raumattribute.schalter [SIZE] – Bashud 2012-04-05 10:34:32

+0

我用'@ count'替换了'[SIZE]'。我认为它应该解决这个例外。 – 2012-04-05 15:01:35