Контроллер отображения поиска дает сбой при возврате результатов - PullRequest
0 голосов
/ 18 марта 2010

У меня есть таблица с контроллером отображения поиска.В прошлом он работал нормально, но недавно начал падать для определенных результатов поиска.Здесь мой код ищет игрока в гольф по его имени, возрасту и гандикапу.Данные правильно загружены в таблицу, я могу получить доступ и просмотреть детали для получения дополнительной информации.Однако, когда я набираю поисковый запрос для имени или возраста, приложение вылетает, а гандикап гольфистов возвращается нормально.

Примечание: dataSouceArray - источник данных для просмотра таблицы., dataSourceArrayCopy является изменяемой копией данных, используемых для добавления и удаления объектов в поисковом фильтре.

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope{
    /*
     Update the filtered array based on the search text and scope.
     */

    [self.dataSourceArrayCopy removeAllObjects]; // First clear the filtered array.

    /*
     Search the main list for products whose type matches the scope (if selected) and whose name matches searchText; add items that match to the filtered array.
     */
    for (Golfer *golfer in dataSourceArray){
        if ([scope isEqualToString:@"Name"] || [golfer.golferName isEqualToString:scope]){
            NSComparisonResult result = [golfer.golferName compare:searchText 
                                                           options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) 
                                                             range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame){
                [self.customerListCopy addObject:golfer];
            }
        }
        if ([scope isEqualToString:@"Age"] || [golfer.golferAge isEqualToString:scope]){
            NSComparisonResult result = [golfer.golferAge compare:searchText 
                                                          options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) 
                                                            range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame){
                [self.dataSourceArrayCopy addObject:golfer];
            }
        }
        if ([scope isEqualToString:@"Handicap"] || [golfer.golferHandicap isEqualToString:scope])
        {
            NSComparisonResult result = [golfer.golferHandicap compare:searchText 
                                                               options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) 
                                                                 range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame)
            {
                [self.dataSourceArrayCopy addObject:golfer];
            }
        }
    }
}  
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString scope:
     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

    // Return YES to cause the search result table view to be reloaded.
    return YES;
}


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

    // Return YES to cause the search result table view to be reloaded.
    return YES;
}

Любая помощь будет принята, спасибо, что нашли время, чтобы прочитать это.

1 Ответ

0 голосов
/ 16 апреля 2010

Как ни странно, при тестировании того же кода на телефоне другого разработчика программа не вылетала. Немного ответа, но пусть это будет уроком для всех, тестирование на нескольких устройствах.

...