Pregunta

Tengo un tableview con un controlador de pantalla de búsqueda. Se ha estado trabajando muy bien en el pasado, pero recientemente ha empezado a chocar para ciertos resultados de búsqueda. Aquí mi código busca un golfista en función de su nombre, edad y para personas discapacitadas. Los datos se cargan correctamente en la mesa, puedo acceder y profundizar para recibir más información. Sin embargo cuando escribo en una consulta de búsqueda, ya sea para el nombre o la edad, la aplicación se bloquea, mientras que el de los golfistas de la desventaja se devuelve bien.

Nota:. dataSouceArray es la fuente de datos para el tableview, dataSourceArrayCopy es la copia mutable de los datos utilizados para añadir y eliminar objetos en el filtro de búsqueda

- (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;
}

Cualquier ayuda se agradece, gracias por tomarse el tiempo para leer esto.

¿Fue útil?

Solución

Por extraño que parezca cuando se prueba el mismo código en otro teléfono desarrolladores, que no se había estrellado el programa. No hay mucho de una respuesta, pero deje que esto sea una lección para todos, prueba en varios dispositivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top