これはほぼ3日間続きましたが、私はまだバグを修正できません。シンプルな状況で、私は人の名前(名前と姓)を検索したいと思います。NSPredicateを使用して検索 - フルネーム
例:
- まず、私はジョン(ジョン・ニューマン、安定ジョン、ジョンCarensで結果を)書きますジョンNと(結果:ジョンニューマン)。検索に空白を入れても、 の名前を表示する必要があります。
これはif/elseの最初の部分で、2+語の配列で動作します。おかげ
- (void)searchForText:(NSString*)searchText
{
NSString *searchTextt = [searchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *array = [searchTextt componentsSeparatedByString:@" "];
NSString *firstName = searchTextt;
NSString *lastName = searchTextt;
NSString *firstName2 = searchTextt;
NSString *lastName2 = searchTextt;
NSPredicate *predicate = nil;
if ([array count] > 1) {
firstName = array[0];
lastName = array[1];
firstName2 = array[1];
lastName2 = array[0];
predicate = [NSPredicate predicateWithFormat:@"(guestName CONTAINS[cd] %@ AND guestSurname CONTAINS[cd] %@)", firstName, lastName];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"(guestSurname CONTAINS[cd] %@ AND guestName CONTAINS[cd] %@)", lastName2, firstName2];
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate, predicate2]];
self.searchResults = [self.mainarray filteredArrayUsingPredicate:compoundPredicate];
} else {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"guestSurname contains[cd] %@", searchText];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"guestName contains[cd] %@", searchText];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"guestCompany contains[cd] %@", searchText];
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate, predicate2, predicate3]];
self.searchResults = [self.mainarray filteredArrayUsingPredicate:compoundPredicate];
}
}
EDIT
:
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
NSString *searchString = searchController.searchBar.text;
[self searchForText:searchString];
[_maintable reloadData];
}
余分なスペースがある場合は、空の文字列を 'array'の2番目の値として取得します。あなたはその特別なケースに対処する必要があります。または、文字列の先頭と末尾の空白をトリムします(スペースで始めると失敗するため)。http://stackoverflow.com/questions/5756256/trim-spaces-from-end -of-a-nsstring –
こんにちは、ありがとうございました。コードでいくつか例を挙げてください。どうもありがとうございます@GerdK –