2016-07-19 4 views
0

sqlite db에서 전화 번호 검색을 수행하고 싶습니다. 전화 테이블에는 문자열 값을 보유하는 숫자 필드가 있습니다 (예 : +1 (2-34) 56-78).NSPredicate를 사용하여 Coredata 가져 오기 요청

사용자가 검색 텍스트를 "234"로 입력하면 NSPredicate를 사용하여 숫자만으로 전화 번호를 가져와야합니다 (다른 모든 알파벳 또는 특수 문자가 저장된 문자열에서 제거됨) 그리고 입력 된 문자열과 비교해야합니다. 가져 오기 요청에서 조건자를 사용하여이 작업을 수행할까요?

나는 다음과 같은 조건으로 시도하고 나에게 예상 된 결과 반환 나던 :

자 NSPredicate *이 조건은 = [자 NSPredicate predicateWithFormat가! 연락처 이름이 = NULL과 하위 쿼리 (phoneList는 $ 전화가 어떠한 $의 phone.number에 포함 된 "@를 [c] % @). @ count> 0 ", searchText];

이 작업을 수행 할 수있는 방법이 있습니까? 이것을 위해 nspredicate와 함께 정규 표현식을 사용할 수 있습니까?

+0

전화 번호가 하나 또는 숫자 일대 다 관계입니까? – Willeke

+0

전화 테이블에는 번호와 레이블이라는 두 개의 필드가 있습니다. 연락처에는 많은 전화 번호가있을 수 있습니다. 그래서 여기 'phoneList'는 연락처와 전화 테이블 간의 많은 관계입니다. 전화 번호로 검색 문자열이있는 연락처를 가져 오는 중입니다. – JamesDon

+0

SUBQUERY 및 ANY는 모두 다 대다 관계를 처리합니다. ''contactName! = null 형식을 사용해보십시오. 그리고 어떤 phoneList.number도 포함되어 있습니다. [c] % @ ", searchText'. – Willeke

답변

1

NSPredicate은 이러한 종류의 일치를 지원하지 않습니다. 핵심 데이터 모델에는 앱에서 필터링에 필요한 데이터가 포함되어야합니다. 이는 사용자가 일반적으로 볼 수없는 추가 입력란을 의미 할 수 있습니다. 숫자가 아닌 문자를 고려하지 않고 숫자를 일치시켜야하는 경우 해당 데이터가 들어있는 필드를 추가해야합니다. 실제 문자열이 +1 (2-34)56-78 인 경우 12345678을 저장하는 보조 필드를 추가하십시오. 이 추가 필드는 술어에서 사용하십시오.

관련 문제