1

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

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

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

什么是最有效的方法来创建一个NSDictionary包含NSSet水果的names 作为键和quantities对象(例如键:对象:苹果:100 橙:20)的最有效方法?

这是如何使用块枚举来完成的:

__block NSMutableDictionary *fruitsAndColors = [NSMutableDictionary dictionary];

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

有没有更优雅的方式来完成同样的事情?

谢谢!

4

2 回答 2

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];
}];
于 2013-08-01T04:41:49.897 回答
2

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

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

我只是给你一个一般的想法,因为你问了一个一般的问题。如果您尝试编写代码,您可能会遇到任何进一步的问题。

于 2012-11-24T14:57:00.187 回答