2014-09-18 3 views
0

nsorderedset이 NSPredicate 문자열에서 다른 nsorderedset의 서브 세트인지 확인하는 데 어려움이 있습니다.isSubsetOfSet in NSPredicate string

나는 아래의 블록 결과를 얻을 수 있습니다

request.predicate = [NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary *bindings) { 
    NSOrderedSet *biggerSet = [object valueForKey:@"attributeName"]; 
    return [smallerSet isSubsetOfOrderedSet:biggerSet]; 
}]; 

하지만 난 문자열 형식에 더 확대됨에 될 수 있다고 생각 (내가 잘못?).

@ "속성 CONTAINS % @"과 @ "% @ IN 속성"같은 것을 시도했지만 운이 없었습니다.

도움 주셔서 감사합니다. 이런

답변

0

뭔가 작동해야

NS(Ordered)Set *smallerSet = … 
request.predicate = 
    [NSPredicate predicateWithFormat:@"SUBQUERY(attribute, $a, $a IN %@)[email protected] == %lu", 
     smallerSet, (unsigned long)[smallerSet count]]; 

술어 검사 smallerSet 포함 "속성"값의 수가 smallerSet 요소의 수와 동일한 경우 . '예'인 경우 smallerSet은 이어야하며 '속성'집합의 하위 집합이어야합니다.

문자열 기반 조건자는 블록 기반보다 일반적으로 빠릅니다 ( https://stackoverflow.com/a/21158730/1187415 비교). 그러나 코어 데이터 가져 오기 요청 ( SQlite 저장 파일 사용) 블록 기반 술어를 사용할 수 없습니다.

+0

고맙습니다. – Nuthinking

+0

SQL 데이터 저장소에 '하위 쿼리에 비 관계 컬렉션 요소가 없습니다'라는 메시지가 나타납니다. 나는 컬렉션에있는 내 사용자 지정 개체에 문제가 있다는 것을 두려워합니다. 그러나 'isEqual'및 '해시'를 재정의합니다. 어떤 아이디어? – Nuthinking

+0

사용자 지정 개체는 NSManagedObject를 하위 클래스로 연결해야하며 아마도 관계를 통해 연결되어있는 것처럼 보입니다. – Nuthinking