У меня есть searchDisplayController
, который отлично работает при поиске английских и арабских слов с помощью следующего метода:
- (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
}
}
Однако, это работает отлично, если язык iphone английский, но если я изменю язык iPhone на арабский (глобальные настройки) и попытаюсь искать арабские или английские слова, searchResultsController
не будет отображать результаты, почему?
p.s. когда я помещаю статическое арабское слово в запрос следующим образом:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", @"تجريب"];
то searchDisplayController
выводит правильный результат арабского слова تجريب
EDIT: Я пытался построить предикат в коде вот так :
NSExpression *clientNameEx=[NSExpression expressionForKeyPath:@"ClientName"];
NSExpression *aClientEx=[NSExpression expressionForConstantValue:query];
NSPredicate *predicate=[NSComparisonPredicate predicateWithLeftExpression:clientNameEx
rightExpression:aClientEx
modifier:NSDirectPredicateModifier
type:NSContainsPredicateOperatorType
options:0];
но безрезультатно . ..