将一组托管对象转换为字典?

时间:2012-11-24 14:47:47

标签: objective-c ios nsdictionary nsmanagedobject nsset

我有NSSet(例如“水果”),由NSManagedObjects组成,并使用以下过滤代码创建:

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

每个水果都有以下属性(属性):name(例如:苹果,橙色,香蕉),color(红色,黄色,绿色)和quantity(100 ,20,10)。

从这个NSDictionary创建NSSet的最有效方法是什么,其中包含name个水果作为密钥,quantities作为密钥对象(例如key:object:apple:100 orange:20)?

这是使用块枚举的方法:

__block NSMutableDictionary *fruitsAndColors = [NSMutableDictionary dictionary];

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

有没有更优雅的方法来实现同样的目标?

谢谢!

2 个答案:

答案 0 :(得分:3)

这是快捷方式。

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];
}];

答案 1 :(得分:2)

您是否尝试过使用自定义NSManagedObject子类的方法,该方法将每个对象写入具有所需键和值的字典。

然后你可以枚举你的NSSet并在每个对象上调用这个方法来创建一个字典集合。

我只是给你一个大致的想法,因为你问了一个普遍的问题。如果您尝试编写代码,您可以回过头来解决任何其他问题。