#core-data #nspredicate #nsset #nsfetchedresultscontroller
#core-data #nspredicate #nsset #nsfetchedresultscontroller
Вопрос:
В настоящее время у меня есть следующая модель Core Data:
Категория
@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:
Одним из возможных решений является использование оператора сбора
@distinctUnionOfSets
кодирования ключ-значение:
NSSet *allItems = [self.category valueForKeyPath:@"subcategory.@distinctUnionOfSets.items"];
(Обратите внимание, что лучшим названием для отношения «подкатегория» для многих было бы
«подкатегории».)
В качестве альтернативы, вы можете выполнить запрос выборки для объекта «Item» с предикатом, используя обратные отношения:
[NSPredicate predicateWithFormat:@"subCategory.category == %@", self.category];
Преимущество этого метода заключается в том, что промежуточные объекты «подкатегории»
не загружаются в память.