2

假设我有一个包含数千个对象的实体 A。这些对象中的每一个都与另一个实体 B 具有一对多的关系。实体 B 的一个属性是“部分”。

我想要实体 A 的所有对象中 B 的所有不同部分的 NSSet。

如果我只希望 B 的不同部分用于 A 的一个对象,我会使用:

[A valueForKeyPath:@"B.section"];

但是有没有一种有效的方法来为 A 的所有对象获取这个?在我看来,获取 A 的所有对象然后迭代这个数组,执行上述操作是“太多的工作”。当然它可以毫不费力地完成,但我希望我的核心数据天真仅仅意味着我不知道在一行中完成此操作的技巧。

如何才能做到这一点?

谢谢!

编辑要求澄清:

假设 Person Entity 与 Vehicles Entity 有一对多的关系。假设 Vehicles 实体具有属性“颜色”。

我想要属于所有人的所有车辆的所有颜色的 NSSet。

4

2 回答 2

1

如果我理解正确,并假设 A-->B 关系具有反向 B-->A 关系 named a,您的问题可以表述为:关系不是 nil的所有不同值B.sectionB.a。这将获得与 some 相关联的B.section每个不同的值。BA

在这种情况下,您需要类似:

// Fetch B
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"B"];
// Fetch B that's related to an A
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a != nil"];
[request setPredicate:predicate];

// Fetch distinct values of "section", return values as NSDictionary
[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctValues:YES];
[request setPropertiesToFetch:@["section"]];

执行它,你会得到一个NSDictionary. 字典有一个名为的键section,对应于B.section。仅包括不同的值。

于 2013-08-28T01:32:41.707 回答
0

假设您有以下托管对象类:

@interface A: NSManagedObject

@property (nonatomic, retain) NSSet *BSet;

@end

如果您有一个名为aObj的A实例,并且您想要获取 BSet 中具有唯一部分的所有对象,您可以执行以下操作:

NSArray *uniqueBSections = 
                  [aObj valueForKeyPath:@"@distinctUnionOfObjects.BSet.section"];
于 2013-08-28T02:48:42.233 回答