2012-01-09 11 views
6

Ho un searchDisplayController che funziona perfettamente per la ricerca di parole arabe inglese e utilizzando un metodo come segue:searchDisplayController non visualizza i risultati se la lingua iphone non è inglese

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

Tuttavia, questo funziona bene se l'iPhone la lingua è l'inglese, ma se cambio la lingua dell'iPhone in arabo (impostazioni globali) e provo a cercare in arabo o in inglese, lo searchResultsController non mostrerà i risultati, perché?

p.s. quando ho messo una parola araba statica in query come questa: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", @"تجريب"]; il searchDisplayController visualizzerà il risultato corretto della parola araba تجريب

EDIT: Ho provato a costruire il predicato in codice come questo:

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

ma inutilmente ...

+1

Utilizzare searchText anziché il testo in searchBar. E per favore, NSLog() la stringa ricevuta in searchText e confronta con la stringa letterale che funziona bene come dici tu nella tua p.s. Quindi sapremo se il problema è con quella stringa. – Gabriel

+0

Ho fatto questo, NSLog mostra la stessa stringa araba letterale in p.s. sezione della mia domanda, MA quello che mi fa impazzire è che il risultato è vuoto !! – JAHelia

+0

E se si confrontassero entrambe le stringhe con '[@ "تجريب" compare: searchText]'? Cosa restituisce? NSOrderSame? – Gabriel

risposta

1

ho fatto progetto di test con XCode 4, modello MasterDetail, checkbox CoreData On e aggiunto SearchBarController alla visualizzazione predefinita Maestro, ha aggiunto UISearchBarDelegate delegato nell'intestazione, e il metodo per invocare searchBarTextDidEndEditing scottare ch una volta fatto viene premuto.

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

Ultimo passo è stato quello di aggiungere nel 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]; 
} 

Switched iPhone Simulator e provato con iOS5 e le impostazioni di arabi. Tutte le ricerche in cui il successo, la ricerca della parola "test" e la parola "تجريب" portano a risultati. Tuttavia, la parola "تجريب" è stata copiata dalla tua domanda, dato che il mio arabo è un po 'arrugginito :) Ho anche provato a registrare nel database con la prima lettera sulla tastiera araba e poi a cercarlo e il risultato si presenta .

+0

ho fatto esattamente la stessa cosa che hai fatto ma non ho mostrato alcun risultato quando la lingua iphone è araba – JAHelia

+0

pensiero casuale: è importante se la lingua della tua macchina di sviluppo è xyz?hai provato a cambiarlo? – govi

+0

Mi dispiace ma non posso farlo adesso, ma ora è l'inglese – JAHelia

1

Ho appena trovato this article e mi ha ricordato la tua domanda. Forse puoi usare questa soluzione?

+0

mi dispiace, questo articolo non è dedicato al caso della mia domanda. grazie comunque per i tuoi sforzi. – JAHelia

Problemi correlati