Преобразовать набор управляемых объектов в словарь?

У меня есть 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];
}];
Другие вопросы по тегам