2012-04-05 108 views
0

我有一個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

回答

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.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