2012-09-12 32 views
1

我不熟悉NSPredicate語法。下面這行代碼就是我想要的。但我想知道是否有更簡潔的方法來做到這一點。NSPredicate:尋找更簡單的代碼

另外,任何有關NSPredicate語法的備忘單都非常感謝。關於NSPredicate的Apple文檔在實踐中似乎更加複雜。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name CONTAINS[cd] %@ OR SELF.city CONTAINS[cd] %@ OR SELF.state CONTAINS[cd] %@",aString, aString, aString]; 

回答

0

你有沒有問題。我懷疑爲了這樣一個簡單的目的,有很多方法可以「改進」或簡化謂詞。

0

你可以使用NSPredicate的子類NSCompoundPredicate

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates: 
           @[[NSPredicate predicateWithFormat:@"SELF.name CONTAINS[cd] %@", aString], 
           [NSPredicate predicateWithFormat:@"SELF.city CONTAINS[cd] %@", aString], 
           [NSPredicate predicateWithFormat:@"SELF.state CONTAINS[cd] %@", aString] 
           ] 
         ]; 

«更多二 - 使用for»艾茲赫爾·戴克斯特拉
«或枚舉» vikingosegundo

NSString *aString [email protected]"Ney York"; 
NSMutableArray *predicates = [@[] mutableCopy]; 
[@[@"name", @"city", @"state"] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSString *format = [NSString stringWithFormat:@"SELF.%@ CONTAINS[cd] %%@", obj]; 
    [predicates addObject:[NSPredicate predicateWithFormat:format, aString]]; 
}]; 

NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];