2012-01-09 30 views
6

Tôi có một searchDisplayController mà hoạt động hoàn hảo khi tìm kiếm bằng tiếng Anh và bằng chữ Ả Rập sử dụng một phương pháp như sau:searchDisplayController không hiển thị kết quả nếu ngôn ngữ iphone là phi tiếng Anh

- (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 
    }  
} 

Tuy nhiên, điều này hoạt động tốt nếu iphone ngôn ngữ là tiếng Anh, nhưng nếu tôi thay đổi ngôn ngữ iPhone sang tiếng Ả Rập (cài đặt chung) và cố tìm kiếm bằng các từ tiếng Ả Rập hoặc tiếng Anh thì searchResultsController sẽ không hiển thị kết quả, tại sao?

p.s. khi tôi đặt một tiếng Ả Rập từ tĩnh trong truy vấn như thế này: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", @"تجريب"]; các searchDisplayController sẽ hiển thị kết quả chính xác của từ arabic تجريب

EDIT: Tôi đã cố gắng để xây dựng vị trong mã như thế này:

NSExpression *clientNameEx=[NSExpression expressionForKeyPath:@"ClientName"]; 
    NSExpression *aClientEx=[NSExpression expressionForConstantValue:query]; 
    NSPredicate *predicate=[NSComparisonPredicate predicateWithLeftExpression:clientNameEx 
                  rightExpression:aClientEx 
                    modifier:NSDirectPredicateModifier 
                     type:NSContainsPredicateOperatorType 
                    options:0]; 

nhưng vô ích ...

+1

Sử dụng searchText thay vì văn bản trong searchBar. Và xin vui lòng, NSLog() chuỗi nhận được trong searchText và so sánh với chuỗi chữ mà hoạt động tốt như bạn nói trong p.s. Vì vậy, chúng tôi sẽ biết nếu vấn đề là với chuỗi đó. – Gabriel

+0

Tôi đã làm điều này, NSLog hiển thị cùng một chuỗi ký tự chữ cái trong p.s. phần câu hỏi của tôi, NHƯNG những gì khiến tôi phát điên là kết quả là trống rỗng !! – JAHelia

+0

Và điều gì xảy ra nếu bạn so sánh cả hai chuỗi với ´ [@ "تجريب" so sánh: searchText] ´? Nó quay trở lại cái gì? NSOrderSame? – Gabriel

Trả lời

1

tôi đã thực hiện dự án thử nghiệm với XCode 4, MasterDetail mẫu, hộp kiểm CoreData On và thêm SearchBarController để giao diện mặc định Master, thêm UISearchBarDelegate đại biểu vào tiêu đề, và phương pháp searchBarTextDidEndEditing để gọi sear ch một lần thực hiện được nhấn.

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{ 
    [NSFetchedResultsController deleteCacheWithName:nil]; 
    self.fetchedResultsController = nil; 
    [self.tableView reloadData]; 
} 

Bước cuối cùng là thêm vào 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]; 
} 

Switched iPhone Simulator và thử nghiệm nó với iOS5 và các thiết lập tiếng Ả Rập. Tất cả các tìm kiếm thành công, tìm kiếm từ "kiểm tra" và từ "تجريب" sẽ trả về kết quả. Tuy nhiên, từ "تجريب" được sao chép dán từ câu hỏi của bạn, như arabic của tôi là chút chút rỉ sét :) Tôi cũng đã cố gắng để làm cho hồ sơ trong cơ sở dữ liệu với chữ cái đầu tiên trên bàn phím arabic và sau đó để tìm kiếm nó và kết quả cho thấy .

+0

tôi đã làm điều tương tự như bạn đã làm nhưng không hiển thị bất kỳ kết quả khi ngôn ngữ iphone là tiếng Ả Rập – JAHelia

+0

suy nghĩ ngẫu nhiên: không quan trọng nếu ngôn ngữ máy phát triển của bạn là xyz?bạn đã thử thay đổi nó chưa? – govi

+0

Tôi xin lỗi tôi không thể làm điều đó ngay bây giờ, nhưng bây giờ là tiếng Anh – JAHelia

1

Tôi vừa tìm thấy this article và nó nhắc tôi câu hỏi của bạn. Có lẽ bạn có thể sử dụng giải pháp này?

+0

im xin lỗi, bài viết này không dành riêng cho trường hợp của câu hỏi của tôi. cảm ơn bạn cho nỗ lực của bạn. – JAHelia

Các vấn đề liên quan