2012-01-09 8 views
6

Tengo un searchDisplayController que funciona a la perfección en la búsqueda de palabras árabes Inglés y el uso de un método de la siguiente manera:searchDisplayController no mostrar los resultados si el idioma iphone no es Inglés

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSInteger)scope 
{ 
    NSString *query = self.searchDisplayController.searchBar.text; 

    if (query && query.length) { 
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", query]; 
     [searchResultController_.fetchRequest setPredicate:predicate];  
    } 

    NSError *error = nil; 
    if (![[self searchResultController] performFetch:&error]) { 
     // Handle error 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    }  
} 

Sin embargo, esto funciona bien si el iPhone el idioma es inglés, pero si cambio el idioma del iPhone a árabe (configuración global) y trato de buscar en palabras en árabe o en inglés, el searchResultsController no mostrará los resultados, ¿por qué?

p.s. cuando pongo una palabra árabe estática en consulta como esta: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", @"تجريب"]; la searchDisplayController mostrará el resultado correcto de la palabra árabe تجريب

EDIT: He intentado construir el predicado en el código como el siguiente:

NSExpression *clientNameEx=[NSExpression expressionForKeyPath:@"ClientName"]; 
    NSExpression *aClientEx=[NSExpression expressionForConstantValue:query]; 
    NSPredicate *predicate=[NSComparisonPredicate predicateWithLeftExpression:clientNameEx 
                  rightExpression:aClientEx 
                    modifier:NSDirectPredicateModifier 
                     type:NSContainsPredicateOperatorType 
                    options:0]; 

pero fue en vano ...

+1

Use searchText en lugar del texto en searchBar. Y por favor, NSLog() la cadena recibida en searchText y compárela con la cadena literal que funciona bien como dices en tus p.s. Entonces sabremos si el problema es con esa cadena. – Gabriel

+0

He hecho esto, NSLog muestra la misma cadena árabe literal en p.s. sección de mi pregunta, PERO lo que me vuelve loco es que el resultado está vacío !! – JAHelia

+0

¿Y si comparas ambas cadenas con '[@ "تجريب" comparar: searchText]'? ¿Qué devuelve? NSOrderSame? – Gabriel

Respuesta

1

he hecho proyecto de prueba con XCode 4, plantilla MasterDetail, casilla CoreData en SearchBarController y añadió a la vista predeterminada Maestro, añade delegado UISearchBarDelegate en la cabecera, y el método para invocar searchBarTextDidEndEditing marchito ch una vez hecho se presiona.

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{ 
    [NSFetchedResultsController deleteCacheWithName:nil]; 
    self.fetchedResultsController = nil; 
    [self.tableView reloadData]; 
} 

El último paso fue añadir en fetchedResultsController:

NSString *query = self.searchDisplayController.searchBar.text; 
if (query.length) { 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp contains[cd] %@", query]; 
    NSLog(@"predicate %@", [predicate description]); 
    [fetchRequest setPredicate:predicate]; 
} 

conmutada iPhone Simulator y probado con iOS5 y configuración árabes. Todas las búsquedas que tuvieron éxito, la búsqueda de la palabra "prueba" y la palabra "تجريب" arrojaron resultados. Sin embargo, la palabra "تجريب" fue copiada de su pregunta, ya que mi árabe está un poco oxidado :). También traté de grabar en la base de datos con la primera letra en el teclado árabe y luego buscarla y el resultado aparece .

+0

hice exactamente lo mismo que tú pero no mostré ningún resultado cuando el idioma de iphone es árabe – JAHelia

+0

pensamiento aleatorio: ¿Importa si el lenguaje de tu máquina de desarrollo es xyz?¿Has intentado cambiarlo? – govi

+0

lo siento, no puedo hacer eso ahora, pero ahora es inglés – JAHelia

1

Acabo de encontrar this article y me ha recordado su pregunta. Tal vez puedas usar esta solución?

+0

lo siento, este artículo no está dedicado para el caso de mi pregunta. gracias de todos modos por sus esfuerzos. – JAHelia

Cuestiones relacionadas