2012-05-23 25 views
1

我有一個實體MyEntity有一個tags對多關係,所以tagsNSSetMyEntity。它是可選的,所以有些MyEntity's沒有tags。這裏的我想要做什麼:基於關係內容的NSPredicate

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

所以我想所有MyEntitys其中rootId == parentId,不給我任何實體,如果它的標籤有一個名爲"badTag"標籤。這裏的問題是,如果實體沒有任何標籤可言,不返回該實體。我試過了上面的一個變種:

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

但是,這給出了相同的結果。我如何才能使這個謂詞適用於實體根本沒有任何標籤的情況?

+0

做沒有標籤,有標籤設置爲零,或根本沒有設置的實體。 – rdelmar

+0

他們應該只是默認值。他們從未設置過,我從不篡改他們。 – Snowman

+0

我測試此代碼,而是使用自定義對象,而不是核心數據實體,和你的第一個謂語的條件下工作,與標籤設置是零(或設置爲無明確或只是未設置)。我不知道爲什麼它與實體有什麼不同。 – rdelmar

回答

1

您可以使用子查詢謂詞解決此問題。一旦掌握了子查詢,子查詢就非常強大。可悲的是,他們沒有很好的文件。

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