在Core Data中,如何获取NSSet的所有对象?

时间:2014-06-29 15:47:13

标签: core-data nspredicate nsset nsfetchedresultscontroller

我目前拥有以下核心数据模型:

分类

@interface Category : NSManagedObject
@property (nonatomic, retain) NSSet *subcategory;

子类别

@interface SubCategory : NSManagedObject
@property (nonatomic, retain) Category *category;
@property (nonatomic, retain) NSSet *items;

产品

@interface Item : NSManagedObject
@property (nonatomic, retain) SubCategory *subCategory;

我希望获得一个类别中的所有项目,但是当我写作时:

NSLog(@"Items in Category:%@", self.category.subcategory.items)

我一无所获。

获取信息的方法是什么?因为我收到了一个带有我在ViewController中添加的属性的类:

@property (strong, nonatomic) Category *category;

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用键值编码 Collection Operator @distinctUnionOfSets

NSSet *allItems = [self.category valueForKeyPath:@"subcategory.@distinctUnionOfSets.items"];

(请注意,多对多关系“子类别”的更好名称将是 “子类别”。)

或者,您可以使用谓词对“Item”实体执行获取请求 使用反比关系:

[NSPredicate predicateWithFormat:@"subCategory.category == %@", self.category];

这种方法的优点是中间的“SubCategory”对象是 没有加载到内存中。