2017-10-20 12 views
0

NSPredicate에서 선택기를 호출 할 방법이 필요합니다. MyElement 객체 배열이 있습니다. MyElement의 속성 중 하나는 단순히 문자열 배열 인 "keywords"입니다. 현재 내가 (어딘가 각 MyElement의 키워드 배열) 특정 키워드를 포함 MyElements 세트를 찾을 술어를 준비 : 키워드 이후NSPredicate 내의 호출 선택기

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%@ IN keywords", someString]; 

가 (유형있는 NSArray의) MyElement의 속성입니다 모두가 잘 작동합니다. 그러나 이제는 술어로 돌아 오기 전에 배열을 조작해야합니다. 다음과 같이하십시오 :

NSString* key = // a key used to help shape the array 
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%@ IN keywordsSpecialArray:key", someString]; 

이렇게하면 마사지 배열을 반환하는 각 MyElement에서 keywordsSpecialArray : key를 호출해야합니다. 이 배열은 @ "% @ IN 키워드"를 사용하여 반환 된 배열의 약간 수정 된 버전입니다.

올바른 구문은 무엇입니까?

+0

'합니다. – Willeke

+0

그렇지 않습니다. 이 문제는 중요하지 않지만 위의 내용은 단순화 된 버전입니다. 사실 MyElement는 UUID를 키와 NSString으로 사용하는 NSDictionary 인 userFields라는 속성을 값으로 사용합니다. MyElement는 valueForUndefinedKey를 구현하여 사전의 값을 조회하는 필드를 가져옵니다. 때로는 그 필드를 문자열로 직접 쓰고 싶지만 때로는 배열로 마사지해야합니다. keywordsSpecialArray : key는 valueForUndefinedKey를 지나가는 key에 대한 필드 문자열을 가져온 다음 특수 배열에 결과를 마사지합니다. – Trygve

+0

"% @ IN keywordsSpecialArray : % K"형식 문자열을 구문 분석 할 수 없습니다. "키"는 동적이어서 % K 여야합니다. – Trygve

답변

0

이 작동 :`: key`는`당신이 반환하는 계산 된 특성`massagedKeywords`을 추가 할 수 있습니다 MyElement``[self.key 자기 keywordsSpecialArray]의 속성이다

predicate = [NSPredicate predicateWithFormat:@"%@ IN FUNCTION(self, 'keywordsSpecialArray:', %@)", value, key];