57

我正在寻找一种方法来NSPredicate设置LIKE条件以获取对象。除此之外, anOR也很有用。我正在尝试做一些事情,如果用户搜索“James”,我可以编写一个NSPredicate相当于:

select * from users where firstname LIKE '%James%' OR lastname LIKE '%James%';
4

3 回答 3

127
NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"(firstname CONTAINS[cd] %@) OR (lastname CONTAINS[cd] %@)", _mySearchKey, _mySearchKey];
于 2010-04-29T21:54:58.700 回答
38

操作员肯定会工作得CONTAINS很好。如果您正在寻找更直接的相关性,那么您还可以使用 LIKE 运算符(*= 0 或更多字符,?= 1 字符):

NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"firstname LIKE '*%1$@*' OR lastname LIKE '*%1$@*'", _mySearchKey];

供参考:
https ://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215868

于 2010-04-29T22:07:42.750 回答
10

另一种可能

@"firstname beginswith[c] James"

作为包含的一个不错的选择

有时包含并不总是正确的答案

于 2011-11-11T14:57:42.673 回答