2012-05-25 4 views
2

나는 tableview + 검색 창으로보기를 만들었습니다. 문자열의 첫 단어를 검색하면 완벽하게 작동합니다! 불행히도 문자열에서 다른 단어를 검색하면 작동하지 않습니다. 그래서 텍스트 검색을한다면 : bal.UISearchBar의 두 번째 단어 검색

그리고 다음 문자열을 살펴보아야합니다. 녹색 발. 아무것도 찾지 못할거야.

나는 현재이 코드를 사용하여 데이터를 검색 창에 텍스트를 비교하고있다 :

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 

[self.filteredListContent removeAllObjects]; // First clear the filtered array. 

for (Product *product in self.listContent) 
{ 

    NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])]; 
    if (result == NSOrderedSame) 
    { 
     [self.filteredListContent product]; 
    } 
} 
NSMutableSet *tempSet = [NSMutableSet setWithArray:self.filteredListContent]; 
self.filteredListContent = [NSMutableArray arrayWithArray:[tempSet allObjects]]; 
} 

가 어떻게이 문제를 해결할 수

?

도움이나 의견을 보내 주시면 감사하겠습니다.

답변

2

이 코드는 NSString에 (대소 문자를 구분하지뿐만 아니라 발음 구별 부호로)를 compare:options:range: 방법을 사용하여 정확히 일치를 찾고 있습니다 :

이 문제 설명을 감안할 때
NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])]; 
if (result == NSOrderedSame) 
{ 
    [self.filteredListContent product]; 
} 

, 당신은 문자열을 확인하고자하는 다른 문자열 안에 포함되어있다 . 대신 NSString에서 rangeOfString:options: 방법을 사용하십시오.

NSRange range = [product.name rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; 
if (range.length > 0) 
{ 
    [self.filteredListContent product]; 
} 
+0

이 방법은 잘 작동합니다. 감사! – justinkoh