NSPredicate查询中的位置

时间:2013-04-11 07:40:49

标签: ios core-data nspredicate

设置

核心数据对象foo与另一个核心数据对象“bar”具有多对多关系。此bar的属性barid类型为int32

我有一个由NSNumbers代表的NSArray(我们将它命名为intlist)。 我有一个foo对象。

问题

我需要知道与此bar个实例相关的foo个对象有多少barid包含在intlist中。

我想我可以使用谓词。但是我的谓词应该采用什么格式?在SQL中它将是SELECT count(*) FROM fooBarLinkTable WHERE fooid = x AND barid IN intlist,但我不知道如何将该语句转换为谓词。

1 个答案:

答案 0 :(得分:6)

我相信你有一个反向关系栏< - > foo,而intlist是NSArray的类型或NSNumber对象的NSSet。如果是,那么请执行以下操作:

NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"bar"];
[request setPredicate:[NSPredicate predicateWithFormat:@"barid IN %@ && ANY relationshipToFoos == %@", intlist, foo]];
NSError* error = nil;
NSUInteger count = [[self.fetchedResultsController managedObjectContext] countForFetchRequest:request error:&error];