2017-05-19 25 views
0

我在我无法理解的情况下挣扎。iOS - 如何使用交换机中的多个键填充NSMutableDictionary

这里是我的代码:

for (CDDetailDpt* detailDpt in [((CDGlobalInfo*)object).details allObjects]) { 
    NSMutableArray *array = [NSMutableArray array]; 
    [array addObject:detailDpt.numDept]; 

    NSLog(@"Department Number = %@", detailDpt.numDept); 
    NSLog(@"Color Number = %@", detailDpt.color); 

    switch ([detailDpt.color intValue]) { 
     case 2: 
      [_deptDict setValue:array forKey:detailDpt.color]; 
      break; 
     case 3: 
      [_deptDict setValue:array forKey:detailDpt.color]; 
      break; 
     case 4: 
      [_deptDict setValue:array forKey:detailDpt.color]; 
      break; 
     default: 
      [_deptDict setValue:array forKey:detailDpt.color]; 
      break; 
    } 
} 

for (id key in _deptDict) 
    NSLog(@"dept Dict = %@", [_deptDict objectForKey:key]); 

让我解释一下:

我扔循环对象CoreData,更确切地说,我有信息的国家各部门的列表。 在这个细节对象中,我有departmentNumber,departmentName和一个colorNumber(从1到4,以便在地图上显示它)。

我想循环每个部门,并根据颜色值(从1到4)我想填充一个NSDictionary与相关部门的关键是颜色编号。

例如:

我的字典将包含n个部门编号为重点@ “1”(色号= 1)等...每个按键。

我的日志只显示给我1个值。我填补了我不填字典。

我试着用setValue方法,方法setObject ..我不明白我做错了..

编辑:

我曾为了增加在数组for循环临时存储的价值不覆盖它。

我觉得我的Switch是无用的,我怎么能根据特定的颜色部门将我的部门编号数组添加到我的字典中的右键?

此外我还添加了一些日志,以便您可以看到我确实有一些值。

登录:

Department Number = 14 
Color Number = 2 
Department Number = 41 
Color Number = 2 
Department Number = 59 
Color Number = 2 
Department Number = 89 
Color Number = 3 
Department Number = 79 
Color Number = 3 
Department Number = 27 
Color Number = 3 
Department Number = 36 
Color Number = 3 
+3

,因为你是在重写相同的密钥值。在每个循环中,在tempArray(NSmutableArray)中添加值并将该数组存储在您的键的字典中。 –

+0

谢谢,我真的很笨... – Balanced

+0

我想这会发生,因为你在'allObjects'中没有'2,3'的couler值,所以你的代码总是碰到'default'的情况,并且插入' @ “1”'。添加'NSLog'来查看实际的数字,这会告诉你发生了什么。 – dasblinkenlight

回答

0

您当前的代码初始化为源的每个元素的数组,所以你风只有一个中的每个元素。

它适用于数组为addObject:的数组,如果数组已存在于字典中。

像:

NSMutableDictionary *deptDict = [[NSMutableDictionary alloc] init]; 

for (DetailDpt *detailDpt in self.detailDpts) { 
    NSString *key = detailDpt.color.stringValue; 
    if ([deptDict valueForKey:key]) { 
     [(NSMutableArray *)[deptDict valueForKey:key] addObject:detailDpt.numDept]; 
    } else { 
     [deptDict setValue:[NSMutableArray arrayWithObject:detailDpt.numDept] forKey:key]; 
    } 
} 

NSLog(@"deptDict = %@", deptDict); 

...的回报:

deptDict = { 
    2 =  (
     14, 
     41, 
     89 
    ); 
    3 =  (
     79, 
     27, 
     36 
    ); 
} 
+0

它运行良好 – Balanced

+0

非常好!我很高兴它的工作。 –

相关问题