метод поиска не работает после второго попадания

У меня проблема с моим UISearchDisplayController, поиск работает некорректно.

Это мой код:

    - (void)filterContentForSearchText:(NSString*)searchText 
                             scope:(NSString*)scope
{
    [self.searchResults removeAllObjects];

    for (int i = 0; i < [temp_category count]; i++) {
        BOOL foundResult = FALSE;

        if ([[temp_category objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_producttitle objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_type objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_description objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if (foundResult) {

            NSNumber *result = [NSNumber numberWithInt:i];
            if ([self searchResults] == nil) {
                NSMutableArray *array = [[NSMutableArray alloc] init];
                [self setSearchResults:array];
                [array release];
            }

                [searchResults addObject:result];

        }
    }

    NSLog (@"array = %i", [searchResults count]);
    NSLog(@"%@",searchResults);
}

    -(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString
{

    [self filterContentForSearchText:searchString 
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:[self.searchDisplayController.searchBar
                                                     selectedScopeButtonIndex]]]; 

    return YES;

}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] 
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:searchOption]]; 

    return YES;
}

Но я все равно запутался, потому что когда я запускаю поиск с первой буквы, он дает правильные попадания. Но когда я ввожу вторую букву, он показывает только один результат (хотя, насколько я знаю из моей выборки данных, их больше). Я что-то делаю неправильно. Я думаю, что это как-то связано с тем, когда пользователь вводит текст, но я не понимаю, какой метод мне следует использовать.

Код, который у меня сейчас есть, представляет собой комбинацию: этот учебник и этот ТАК вопрос.

Может ли кто-нибудь дать мне подсказку в хорошем направлении? Отображение результатов нормально, вот только этот аспект меня смущает. Я думаю, что это как-то связано с запуском метода и [self.searchResults removeAllObjects];.


person Prastow    schedule 08.07.2012    source источник
comment
Я остановился на UISearchDisplayController и реализовал UISearchBar отдельно, и теперь все работает :)   -  person Prastow    schedule 08.07.2012
comment
Прохладный. Когда вы сможете (я знаю, что это ограничено по времени), можете ли вы опубликовать это в качестве ответа ниже, чтобы будущие посетители сайта могли найти решение аналогичных вопросов, которые у них могут возникнуть? Спасибо.   -  person pasawaya    schedule 08.07.2012
comment
Спасибо. Теперь вы должны проверить это/отметить как ответ.   -  person pasawaya    schedule 09.07.2012


Ответы (1)


Я хотел бы добавить свой код, но дело в том, что я все еще использую код, который у меня есть выше, но я вручную реализую UISearchBar (который я нашел где-то еще в учебнике) вместо использования SearchDisplayController. У меня также были трудности с панелью навигации, которая исчезала при использовании SearchDisplayController, что дало мне достаточно причин, чтобы реализовать ее самостоятельно вместо использования SearchDisplayController. Это дает вам больше свободы.

Сначала казалось, что это много работы, поэтому я решил использовать SearchDisplayController, но я действительно советую всем, кому нужны некоторые модификации или кто хочет больше свободы, сделать это вручную с помощью UISearchBar и UITableView :)

person Prastow    schedule 08.07.2012