2013-09-16 3 views
1

Я хотел бы улучшить исследование в пределах моего UITableViewController. Теперь у меня есть NSMutableArray вроде этого:Улучшить поиск в UISearchDisplayController

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"the dog is brown",@"the cat is red",@"the mouse is grey"]; 

Теперь, если я пишу в своем searchbar, например: «кошки», таблица покажет «кот красный» и это нормально. Но если я напишу: «cat red», таблица будет пустой.

Что я могу сделать, чтобы улучшить это?

так становится, как сделать поиск в настоящее время:

-(void)loadArray { 

    arraySearch = [[NSMutableArray alloc] initWithCapacity:[array count]]; 
    [arraySearch addObjectsFromArray: array]; 
} 

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 

    [arraySearch removeAllObjects]; 

    for (int z=0; z<[array count]; z++) { 

    if ([[array objectAtIndex:z] rangeOfString:searchText options:NSCaseInsensitiveSearch].location !=NSNotFound) { 

     [arraySearch addObject:[array objectAtIndex:z]]; 
    } 

     [self.tableView reloadData]; 

} 

Спасибо всем.

Я нашел решение, и я хотел бы поделиться с вами:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 

[arraySearch removeAllObjects]; 

    NSArray *listItems = [searchText componentsSeparatedByString:@" "]; 


NSMutableArray *arrayPredicate = [NSMutableArray array]; 
for (NSString *str in listItems) { 

    if ([str length] > 0) { 
     NSPredicate *pred = [NSPredicate predicateWithFormat:@"self contains [cd] %@ OR self contains [cd] %@", str, str]; 
     [arrayPredicate addObject:pred]; 
    } 
} 

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:arrayPredicate]; 

[arraySearch addObjectsFromArray:[array filteredArrayUsingPredicate:predicate]]; 


[self.tableView reloadData]; 

} 

ответ

1
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 

    [arraySearch removeAllObjects]; 

    //Break the sentence into words 
    NSArray *listItems = [searchText componentsSeparatedByString:@" "]; 

    //Iterate each word and create predicate statement 
    NSMutableArray *predicatesArray = [NSMutableArray array]; 
    for (NSString *str in listItems) { 
     [predicatesArray addObject:[NSString stringWithFormat:@"SELF like[c] %@",str]]; 
    } 

    //Concatenate predicate statements by conditional OR 
    NSPredicate* predicate = [NSPredicate predicateWithFormat:[predicatesArray componentsJoinedByString:@" OR "]]; 

    //Filter the array against matching predicate 
    [arraySearch addObjectsFromArray:[array filteredArrayUsingPredicate:predicate]]; 

    [self.tableView reloadData]; 

} 
+0

спасибо за ответ, я получаю сообщение об ошибке: «слишком много аргументов для вызова метода, ожидается 1, есть 2 "на [array addObject: @" SELF как [c]% @, str]; " – Ilario

+0

извините, отредактировал ответ. попробуй. Ошибка –

+0

: arraySearch = [arraySearch filterArrayUsingPredicate: предикат]; несовместимые типы указателей, назначающие «NSMutableArray» из «NSArray» – Ilario

Смежные вопросы