2012-11-24 23 views
1

我有一個NSSet(例如,「水果」)所組成的NSManagedObjects並通過使用下面的過濾代碼創建的:將一組託管對象轉換爲字典?

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

每個水果的具有以下性質(屬性):name(例如:蘋果,橙色,香蕉),color(紅色,黃色,綠色)和quantity(100,20,10)。

什麼是創建一個NSDictionary出這個NSSet其中包含name S上的水果爲鍵和quantities爲對象的最有效的方法(例如鑰匙:對象:蘋果:100橙色:20)?

這是如何可以使用塊枚舉來完成:

__block NSMutableDictionary *fruitsAndColors = [NSMutableDictionary dictionary]; 

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

有來完成相同的一個更優雅的方式?

謝謝!

回答

2

您是否嘗試過使用自定義NSManagedObject子類的方法,將每個對象寫入帶有所需鍵和值的字典中。

然後你可以枚舉你的NSSet並在每個對象上調用這個方法來創建一個字典集合。

我只是給你一個大概的想法,因爲你問了一個普遍的問題。如果您嘗試編寫代碼,您可能會遇到任何進一步的問題。

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