针对一对多关系的NSPredicate会产生重复结果

时间:2016-11-09 01:20:01

标签: ios objective-c core-data nspredicate

enter image description here我有2个具有一对多关系的实体(Category和SubCategory)。我想在tableView中显示类别,每个类别代表tableView中的一个部分(类别名称将是标题视图的标题,其所有关联的子类别将是行)。我必须用'isActive == NO'排除子类别。 为实现这一点,我在Category实体上创建了NSFetchRequest,如下所示。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Category" inManagedObjectContext:moc];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY subCategories.isActive == YES"];
[fetchRequest setPredicate:predicate];
[fetchRequest setEntity:entity];

但是这个获取请求给出了倍数(重复)类别。即如果“isActive == YES”的子分类总数为25,那么我在fetchedResult中得到25个分类。

我也试过“SUBQUERY”,并且我没有得到重复的类别,但我得到所有的SubCategories而不管“isActive == YES”。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Category" inManagedObjectContext:moc];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(subCategories, $x, ($x. isActive == 1)).@count != 0)"];
[fetchRequest setPredicate:predicate];
[fetchRequest setEntity:entity];

任何人都可以帮我解决这个问题。

0 个答案:

没有答案