2010-12-22 3 views
3

NSPredicates를 사용하여 이름 속성을 기반으로 엔티티를 가져옵니다. 글자로 시작하는 이름을위한 술어를 생성하는 것은 쉬웠지만 (@ "name BEGINSWITH % @", searchLetter), 이제 모든 엔티티를 숫자 값으로 시작하는 이름 또는 알파벳이 아닌 문자로 가져오고 싶습니다.NSPredicate를 생성하여 앞선 수치 값을 가진 엔트리를 찾는 방법은 무엇입니까?

여기서 적절한 술어 표현식은 무엇입니까?

지금 당장은 내가 필요로하는 모든 것이 프리디 케이트 프로그래밍에 너무 깊이 들어가기를 원하지 않습니다. 그럼, 제발, 약식 프로그래밍 가이드 가리킨하지 말고, 그 표현이 필요해 .. :)

고마워!

답변

5

, 당신은 본질적으로 직접 물건을해야 할 것이다 : 문자로 시작하지 않는 모든 것을 얻을 것이다

NOT(name BEGINSWITH[cd] 'a' OR name BEGINSWITH[cd] 'b' OR ... OR name BEGINSWITH[cd] 'z') 

합니다. 마찬가지로 :

name BEGINSWITH[cd] '0' OR name BEGINSWITH[cd] '1' OR ... OR name BEGINSWITH[cd] '9' 

숫자로 시작하는 모든 것을 얻을 수 있습니다. 당신이 name의 첫 글자를 추출 할 수 있다면

, 당신은 할 수 :

편집 코멘트는 다른 생각하라는 메시지가

NOT(name[0] IN %@), arrayOfLetters 

(name[0]name의 첫 번째 문자가되고, 그리고 arrayOfLetters 알파벳 문자의 NSArray)

+1

나는 그것을 시도하지는 않았지만 문자 배열을 던질 수 있습니다. 그것은 술어 처리자가 다른 곳에서 꽤 잘하는 것처럼 보입니다. 'predicate = "NOT (name BEGINSWITH [cd] % @)", arrayOfLetters;'어쨌거나 더 빠를 것 같아서 더 빨리 구문 분석 될 것입니다. 물론 그것이 작동한다고 가정합니다. :) –

1

정규식 (예 :^[0-9])을 사용하여 비교할 수있는 곳에 '일치'를 사용할 수 있습니다. 그러나 내가 아는 한 핵심 데이터를 다룰 때 작동하지 않습니다.

또 다른 솔루션은 새로운 (OS X 10.6, iOS 4.0) predicateWithBlock:을 사용하고 문자열 메소드로 상태를 직접 확인하는 것입니다. MATCHES 운영자가 가져 오기 요청을 작동하지 않는 경우

관련 문제