2011-12-20 113 views
74

我有一个NSArray,我想过滤掉某些对象使用NSPredicate,我希望我可以使用NOT IN,因为我看到我可以轻松地做一个IN。NSArray与NSPredicate使用NOT IN

所以,我有我的数组:

self.categoriesList 

然后我得到了我想要删除的值:

NSArray *parentIDs = [self.cateoriesList valueForKeyPath:@"@distinctUnionOfObjects.ParentCategoryID"]; 

这让我对类我不想显示ParentCategoryID的名单,所以我想我可以使用NSPredicate将其删除:

self.cateoriesList = [self.cateoriesList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"CategoryID NOT IN %@",parentIDs]]; 

这种失败:

reason: 'Unable to parse the format string "CategoryID NOT IN %@"' 

如果我只想使用IN,那当然是完美的。

回答

182

NOT (CategoryID IN %@)怎么样?

+3

嗯......是的,这是行之有效的 - DOH! – Slee 2011-12-20 19:22:36

+0

!(CategoryID IN%@) - 也可以) – 2015-02-04 19:19:34

1

如何使用NONE

[NSPredicate predicateWithFormat:@"NONE CategoryID IN %@", parentIDs]; 
+2

请注意,NONE仅适用于多对多关系。请参阅http://stackoverflow.com/questions/12127618/nspredicate-the-left-hand-side-for-an-all-or-any-operator-must-be-either-an-nsa – Lubbo 2013-06-21 11:06:25