我有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
将显示阿拉伯语تجريب
的正确结果
编辑:我试图在这样的代码中构建谓词:
NSExpression *clientNameEx=[NSExpression expressionForKeyPath:@"ClientName"];
NSExpression *aClientEx=[NSExpression expressionForConstantValue:query];
NSPredicate *predicate=[NSComparisonPredicate predicateWithLeftExpression:clientNameEx
rightExpression:aClientEx
modifier:NSDirectPredicateModifier
type:NSContainsPredicateOperatorType
options:0];
但无济于事......
答案 0 :(得分:1)
我已经使用XCode 4,MasterDetail模板,CoreData复选框打开了测试项目,并将SearchBarController添加到默认的主视图,将UISearchBarDelegate委托添加到标题中,并且按下了searchBarTextDidEndEditing方法以在调用完成后调用搜索。
-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{
[NSFetchedResultsController deleteCacheWithName:nil];
self.fetchedResultsController = nil;
[self.tableView reloadData];
}
最后一步是添加到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];
}
切换iPhone模拟器并使用iOS5和阿拉伯语设置进行测试。所有成功的搜索,搜索单词“test”和单词“تجريب”都会显示结果。 然而,单词“تجريب”是从你的问题中复制粘贴的,因为我的阿拉伯语有点生锈:)。我也尝试用阿拉伯语键盘上的第一个字母在数据库中创建记录然后搜索它并且结果显示出来。
答案 1 :(得分:1)
我刚刚找到this article,它提醒了我你的问题。也许你可以使用这个解决方案?