は私が単語ベースの述語のために使用するものです。
NSArray *results = [contacts filteredArrayUsingPredicate:namePredicate];
:
+ (NSPredicate *)wordBasedPredicateForString:(NSString *)searchString withProperty:(NSString *)property
{
// searchString = [searchString stringForSearch];
NSArray *searchStrings = [searchString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSMutableArray<NSPredicate *> *subPredicates = [NSMutableArray array];
for (NSString *string in searchStrings)
if (![string isEqualToString:@""]) {
NSString *mainString = [property stringByAppendingString:@" CONTAINS[cd] "];
mainString = [NSString stringWithFormat:@"%@ CONTAINS[cd] %%@",property];
NSPredicate *predicate = [NSPredicate predicateWithFormat:mainString, string];
[subPredicates addObject:predicate];
}
if ([searchString containsString:@" "] && subPredicates.count > 0) {
NSString *mainString = [property stringByAppendingString:@" CONTAINS[cd] "];
mainString = [mainString stringByAppendingString:@"' '"];
NSPredicate *emptySpacePredicate = [NSPredicate predicateWithFormat:mainString, nil];
[subPredicates addObject:emptySpacePredicate];
}
NSCompoundPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
return predicate;
}
は、私たちがその配列をフィルタリングname
プロパティ
NSPredicate *namePredicate = [self wordBasedPredicateForString:searchString withProperty: @"name"];
でContact
オブジェクトを持っていると仮定しましょう
もちろん、名前に複数の単語ベースの述語を作ることができます。c ompany、アドレスなどと、このような1 compoundPredicateます
orPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[namePredicate, addressPredicate, phonePredicate]];
はそれに役立つことを願っています。)
あなたは述語で正規表現を使用することができます。私はそこに可能な答えを掲示した:http://stackoverflow.com/questions/42156932/how-to-make-search-bar-as-iphone-contact-app-or-search-bar-which-handles-more-th/42162841#42162841 – Larme