我不熟悉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)
你有什么好。我怀疑你有很多方法可以改善"或者为了这么简单的目的简化你的谓词。
答案 1 :(得分: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]
]
];
但是
«两个以上 - 使用一个» 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];