У меня есть 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
не будет отображать результаты, почему?
ps, когда я помещаю в запрос статическое арабское слово, например: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", @"تجريب"];
searchDisplayController
будет отображать правильный результат арабского слова تجريب
РЕДАКТИРОВАТЬ: я пытался построить предикат в коде, как это:
NSExpression *clientNameEx=[NSExpression expressionForKeyPath:@"ClientName"];
NSExpression *aClientEx=[NSExpression expressionForConstantValue:query];
NSPredicate *predicate=[NSComparisonPredicate predicateWithLeftExpression:clientNameEx
rightExpression:aClientEx
modifier:NSDirectPredicateModifier
type:NSContainsPredicateOperatorType
options:0];
, но нетбез ...