Преобразовать набор управляемых объектов в словарь?
У меня есть NSSet
(например, "фрукты"), который состоит из NSManagedObjects
и создается с использованием следующего кода фильтрации:
NSSet *fruits = [self.allFruits filteredSetUsingPredicate:
[NSPredicate predicateWithFormat:@"quantity > 10"];
Каждый из плодов обладает следующими свойствами (атрибутами): name
(например: яблоко, апельсин, банан), color
(красный, желтый, зеленый) и quantity
(100, 20, 10).
Что было бы наиболее эффективным способом создания NSDictionary
из этого NSSet
который содержит name
с фруктами в качестве ключей и quantities
как объекты (например, ключ: объект: яблоко: 100 апельсин: 20)?
Вот как это можно сделать, используя перечисление блоков:
__block NSMutableDictionary *fruitsAndColors = [NSMutableDictionary dictionary];
[fruits enumerateObjectsUsingBlock:^(id fruit, BOOL *stop) {
[fruitsAndColors setObject:fruit.color forKey:fruit.name];
}];
Есть ли более элегантный способ сделать то же самое?
Спасибо!
2 ответа
Вы пытались использовать пользовательский подкласс NSManagedObject с методом, который записывает, записывает каждый объект в словарь с ключами и значениями, которые вы хотите.
Затем вы можете перечислить свой NSSet и вызвать этот метод для каждого объекта, чтобы создать коллекцию словарей.
Я даю вам только общую идею, потому что вы задали общий вопрос. Если вы попытаетесь написать код, вы можете вернуться с любыми проблемами, с которыми вы столкнулись.
Это быстрый и простой способ.
NSMutableArray *array = [NSMutableArray arrayWithCapacity:ManagedObjectItems.count];
[[ManagedObjectItems allObjects] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Diary_item_food *food = obj;
NSArray *keys = [[[food entity] attributesByName] allKeys];
NSDictionary *dict = [obj dictionaryWithValuesForKeys:keys];
[array addObject:dict];
}];