JAH*_*lia 6 iphone objective-c arabic uisearchdisplaycontroller ios
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
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果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];
Run Code Online (Sandbox Code Playgroud)
但无济于事......
我已经使用 XCode 4、MasterDetail 模板、CoreData 复选框打开了测试项目,并将 SearchBarController 添加到了默认的主视图中,将 UISearchBarDelegate 委托添加到了标题中,并在按下完成后调用了 searchBarTextDidEndEditing 方法来调用搜索。
\n\n-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{\n [NSFetchedResultsController deleteCacheWithName:nil];\n self.fetchedResultsController = nil;\n [self.tableView reloadData];\n}\nRun Code Online (Sandbox Code Playgroud)\n\n最后一步是添加到 fetchedResultsController 中:
\n\nNSString *query = self.searchDisplayController.searchBar.text;\nif (query.length) {\n NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp contains[cd] %@", query];\n NSLog(@"predicate %@", [predicate description]);\n [fetchRequest setPredicate:predicate];\n}\nRun Code Online (Sandbox Code Playgroud)\n\n切换iPhone模拟器并使用iOS5和阿拉伯语设置进行测试。所有搜索均成功,搜索单词“test”和单词“\xd8\xaa\xd8\xac\xd8\xb1\xd9\x8a\xd8\xa8”会显示结果。\n但是,单词“\xd8\xaa\xd8” \xac\xd8\xb1\xd9\x8a\xd8\xa8" 是从您的问题中复制粘贴的,因为我的阿拉伯语有点生锈了:)。我还尝试在数据库中使用阿拉伯语键盘上的第一个字母进行记录,然后搜索它并显示结果。
\n| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |