2012-08-01 2 views
1

UISearchDisplay 컨트롤러 설정이 있고 값을 필터링 할 수 있지만 누군가가 결과를 필터링하는 좀 더 고급 방법으로 나를 도울 수 있는지 궁금합니다.NSArray 특정 방법으로 하위 문자열을 검색하십시오.

내 배열했다 말 : 는 {미국의 예는, 에릭, 다른-에릭}

사용자가 "에리"를 검색하면해야만을 반환하기 때문에 결과가 {에릭, 다른-에릭} 을해야한다 단어가 단어의 중심 (미국)에있는 경우가 아니라 부분 문자열로 시작하는 결과입니다.

'-'가 ''일 수 있고 visaversa 인지도 확인해야합니다. 따라서 하위 문자열 'Different-Eri'는 하위 문자열 'Different Eri'를 검색하고 역으로도 검색합니다.

더 이상 설명이 필요하면 답해 드리겠습니다. 나는 이것에 관해 좋은 방법이 있는지 궁금해하고있었습니다.

현재 코드 :

NSPredicate *resultPredicate = [NSPredicate 
            predicateWithFormat:@"SELF.comname contains[cd] %@", 
            searchText]; 

    searchResults = [[birdsArray filteredArrayUsingPredicate:resultPredicate] mutableCopy]; 

답변

0

나는 실제로 내 사용자 정의 개체와 검색 조건을 일부 변경하여이 문제를 해결했다. 이전에 생각했던 것보다 훨씬 간단한 솔루션입니다.

내 사용자 정의 개체에서 2 속성을 만들었고 Getters 메서드가 기본적으로 '첫 번째 이름'과 '성'을 반환했습니다. 기본적으로 '또는'을 사용하여 전체 문자열을 첫 번째 단어와 마지막 단어로 분리했습니다. - '를 단어 구분자로 사용합니다.

내 검색 조건

은 간단했다 :

NSPredicate *spacePredicate = [NSPredicate 
            predicateWithFormat:@"SELF.comname BEGINSWITH[cd] %@ OR SELF.lastname BEGINSWITH[cd] %@", 
            searchText, searchText]; 

    searchResults = [[birdsArray filteredArrayUsingPredicate:spacePredicate] mutableCopy]; 

내가 사용하는 'BEGINSWITH'대신에 단어의 시작은 문자열을 일치 확인이 포함되어 있습니다.

끝 : 누군가를 돕기를 바랍니다.

관련 문제