1

我不熟悉 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];
4

2 回答 2

0

你所拥有的很好。我怀疑有很多方法可以“改进”或简化您的谓词,以实现如此简单的目的。

于 2012-09-12T12:52:04.670 回答
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» Edsger W. Dijkstra
«或枚举» vikingosegundo

NSString *aString =@"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];
于 2015-03-05T19:03:40.913 回答