2012-05-23 4 views
1

의 내용에 기초하여 I 정도로 tagsMyEntityNSSet이다하는 tags 일대 다 관계가있는 엔티티 MyEntity있다. 선택 사항이므로 일부 MyEntity's에는 tags이 없습니다. 여기에 내가 할 노력하고있어 무엇을 :자 NSPredicate는 관계

predicate= [NSPredicate predicateWithFormat: 
@"(rootId == parentId AND NONE tags.tagName == %@)", @"badTag"]; 

그래서 나는 모든 MyEntitysrootId == parentId를 얻으려면 그 태그 "badTag"라는 태그가있는 경우 단체에게 나에게 제공하지 않습니다. 이 문제는 엔티티에 태그가 전혀없는 경우 해당 엔티티가 반환되지 않는다는 것입니다. 위의 변형을 시도했습니다 :

@"(rootId == parentId AND ANY tags.tagName != %@)", @"badTag"]; 

그러나 이것은 동일한 결과를 제공합니다. 엔티티에 태그가 전혀없는 경우 어떻게이 조건부를 사용할 수 있습니까?

+0

태그가 없거나 설정되지 않은 태그가 설정되어 있습니다. – rdelmar

+0

그들은 단지 기본값을 가져야합니다. 그들은 결코 정해지지 않았고, 나는 결코 그들과 함부로 다루지 않았다. – Snowman

+0

이 코드는 핵심 데이터 엔티티가 아닌 사용자 정의 객체로 테스트했으며 첫 번째 조건자는 nil (명시 적으로 nil로 설정되거나 설정되지 않음)으로 설정된 조건으로 작업했습니다. 왜 엔티티와 다를 지 모르겠다. – rdelmar

답변

1

하위 쿼리 조건 자로 해결할 수 있습니다. 서브 쿼리는 일단 마스터하면 매우 강력합니다. 슬프게도 그들은 잘 문서화되어 있지 않습니다.

(rootId == parentId) AND (SUBQUERY(tag, $x, $x.tagName == %@).count() == 0) 
1

아마도 OR COUNT(tags) == 0을 추가하면 원하는 것을 얻을 수 있습니까?

SQL 스토어 인 경우 CoreData SQL 디버깅을 켜고 실제로 실행중인 내용을 확인하십시오. XCode4 and Core Data: How to enable SQL Debugging