Search code examples
objective-ciosnsdictionarynsmanagedobjectnsset

Convert a set of managed objects to a dictionary?


I have a NSSet (e.g. "fruits") which consists of NSManagedObjects and is created by using the following filtering code:

NSSet *fruits = [self.allFruits filteredSetUsingPredicate:
                         [NSPredicate predicateWithFormat:@"quantity > 10"];

Each of the fruits has the following properties (attributes): name (e.g.: apple, orange, banana), color (red, yellow, green) and quantity (100, 20, 10).

What would be the most efficient way to create a NSDictionary out of this NSSet which contains the names of the fruits as the keys and the quantities as the objects (e.g. key:object: apple: 100 orange: 20)?

This is how this could be done using block enumeration:

__block NSMutableDictionary *fruitsAndColors = [NSMutableDictionary dictionary];

[fruits enumerateObjectsUsingBlock:^(id fruit, BOOL *stop) {
      [fruitsAndColors setObject:fruit.color forKey:fruit.name];
}];

Is there a more elegant way to accomplish the same?

Thank you!


Solution

  • Have you tried using a custom NSManagedObject subclass with a method that writes writes each object out to a dictionary with the keys and values that you want.

    Then you can enumerate your NSSet and call this method on each object to create a collection of dictionaries.

    I'm only giving you a general idea because you've asked a general question. If you try and write the code you can come back with any further problems that you face.