Skip to content

Instantly share code, notes, and snippets.

@AdityaDeshmane
Created February 18, 2016 16:13
Show Gist options
  • Save AdityaDeshmane/0699f495f69a876e3cb0 to your computer and use it in GitHub Desktop.
Save AdityaDeshmane/0699f495f69a876e3cb0 to your computer and use it in GitHub Desktop.
iOS: Full name search using predicate
-(NSArray*) dataSourceForSearchString:(NSString*) searchedText
{
NSString *strTrimmedSearchText = [searchedText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *array = [strTrimmedSearchText componentsSeparatedByString:@" "];
NSPredicate *predicate = nil;
/*
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *midName;
@property (nonatomic, strong) NSString *lastName;
*/
if(array.count == 1)
{
predicate = [NSPredicate predicateWithFormat:@"firstName CONTAINS[c] %@ OR lastName CONTAINS[c] %@",
strTrimmedSearchText,
strTrimmedSearchText];
}
else if (array.count == 2)//search contains firstname and lastname
{
NSString *firstName = [array objectAtIndex:0];
NSString *lastName = [array objectAtIndex:1];
//firstName should exact match, lastname should begin with text
predicate = [NSPredicate predicateWithFormat:@"(firstName LIKE[c] %@ AND lastName BEGINSWITH[c] %@)",
firstName,
lastName];
}
else if(array.count == 3)//search contains firstname, middlenamey and lastname
{
NSString *firstName = [array objectAtIndex:0];
NSString *midName = [array objectAtIndex:1];
NSString *lastName = [array objectAtIndex:2];
//firstName and middle name should exact match, lastname should begin with text
predicate = [NSPredicate predicateWithFormat:@"(firstName LIKE[c] %@ AND midName LIKE[c] %@ AND lastName BEGINSWITH[c] %@)",
firstName,
midName,
lastName];
}
else
{
return [NSArray new];
}
NSArray *filteredArray = [_arrayBeneficiarySummaryList filteredArrayUsingPredicate:predicate];
return filteredArray;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment