Dav*_*d P 14 iphone objective-c nsstring nspredicate ios
我有一个Person具有两个NSString属性的Object ; firstName and lastName.我目前正在使用NSPredicate这样的:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(firstName contains[cd] %@) OR (lastName contains[cd] %@)", searchText, searchText];
Run Code Online (Sandbox Code Playgroud)
所以,例如,说我正在寻找这个名字"John Smith".在我的搜索栏中,如果我输入"Joh",John Smith则会显示为选项.这很好,但如果我输入"John Sm"它将变为空白.
我如何加入firstName和lastName,predicate如果我正在搜索,"John Sm"那么John Smith仍然会显示为一个选项.
我希望这是有道理的.谢谢.
编辑:为了进一步澄清,我正在使用SearchDisplayController委托方法:
-(void)filterContentForSearchText:(NSString *)searchText scope:(NSString *)scope;
Run Code Online (Sandbox Code Playgroud)
我正在使用predicate这样的:
newArray = [personObjectArray filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
iDe*_*Dev 20
试试这个,
NSString *text = @"John Smi";
NSString *searchText = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *array = [searchText componentsSeparatedByString:@" "];
NSString *firstName = searchText;
NSString *lastName = searchText;
NSPredicate *predicate = nil;
if ([array count] > 1) {
firstName = array[0];
lastName = array[1];
predicate = [NSPredicate predicateWithFormat:@"(firstName CONTAINS[cd] %@ AND lastName CONTAINS[cd] %@) OR (firstName CONTAINS[cd] %@ AND lastName CONTAINS[cd] %@)", firstName, lastName, lastName, firstName];
} else {
predicate = [NSPredicate predicateWithFormat:@"firstName CONTAINS[cd] %@ OR lastName CONTAINS[cd] %@", firstName, lastName];
}
NSArray *filteredArray = [people filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filteredArray);
Run Code Online (Sandbox Code Playgroud)
输出:
(
{
firstName = John;
lastName = Smith;
}
)
Run Code Online (Sandbox Code Playgroud)
这里的文字代表搜索到的文字.上述优点是,即使你通过text = @"Smi Joh";或text = @"John ";或text = @" smi";或text = @"joh smi ";,它仍将显示上述输出.
| 归档时间: |
|
| 查看次数: |
4292 次 |
| 最近记录: |