如果iphone语言不是英语,searchDisplayController不会显示结果

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)

但无济于事......

Ale*_*lex 1

我已经使用 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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后一步是添加到 fetchedResultsController 中:

\n\n
NSString *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}\n
Run 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