0

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

Примечание:dataSouceArray является источником данных для Tableview, 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

Я не вижу ничего явно неправильного на беглом взгляде. Вам нужно установить точки останова и пройти через код, чтобы найти точные строки, на которые он падает, и опубликовать их. – TechZen

+0

В будущем, не используйте вкладки в своем коде для отступа, он закручивает форматирование. – TechZen

+0

Спасибо, что посмотрели, я сообщу позже. – Convolution

ответ

0

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