У меня есть табличное представление с контроллером отображения поиска. Он работал отлично в прошлом, но в последнее время начал сбой для определенных результатов поиска. Здесь мой код ищет игрока в гольф, основываясь на их имени, возрасте и гандикапах. Данные правильно загружены в таблицу, я могу получить доступ и развернуться, чтобы получить дополнительную информацию. Однако, когда я набираю поисковый запрос для имени или возраста, приложение вылетает, в то время как гандикап игроков в гольф возвращается в порядке.Поиск Дисплей Контроллер падает при возврате результатов
Примечание: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;
}
Любая помощь будет оценена, спасибо, что нашли время, чтобы прочитать это.
Я не вижу ничего явно неправильного на беглом взгляде. Вам нужно установить точки останова и пройти через код, чтобы найти точные строки, на которые он падает, и опубликовать их. – TechZen
В будущем, не используйте вкладки в своем коде для отступа, он закручивает форматирование. – TechZen
Спасибо, что посмотрели, я сообщу позже. – Convolution