使用字典中字典中的对象填充mutableArray

时间:2011-01-23 11:34:11

标签: objective-c nsmutablearray nsdictionary

我无法在一组NSDictionaries(每个代表一个员工)中填充一组对象(员工姓名),这些NSDictionaries位于另一个NSDictionary *字典(人员)中。每个子词典的关键是员工ID。

我可能会从一个完全错误的方向来到这里,我是一个非常新手,但从我所读到的应该是这样的东西,我已经设法得到一个pName(员工姓名)来自每个子词典,都是短暂的。我只是无法将pNames添加到MutableArray *名称中。

非常感谢任何帮助或指导...

  int i, count;
  id key, value;

  keys = [dictionary allKeys];
  count = [keys count];
  for (i = 0; i < count; i++)
  {
   key = [keys objectAtIndex: i];
   value = [dictionary objectForKey: key];
   NSLog (@"value:%@", value); 

   NSString *pName = [value objectForKey:@"personName"];
   NSLog (@"pName:%@", pName);// the debugger shows the correct pName with each loop

   [names addObject:pName];// this is wrong and i don't know why
  }
   NSLog (@"names:%@", names);// in the debugger names (null)

2 个答案:

答案 0 :(得分:3)

您也可以使用collection operators,特别是@unionOfObjects运算符执行此操作:

NSMutableArray *names = [[[personnel allValues] 
                            valueForKeyPath:@"@unionOfObjects.personName"] 
                            mutableCopy];

请注意,names将由该方法拥有(其保留计数为1),但临时数组([personnel allValues]和由valueForKeyPath:创建的数组)是自动释放的,不属于通过这种方法。

由于某种原因(可能是因为以“@”开头的键名在valueForKey:中是特殊的,因此valueForKeyPath:不等同于对valueForKey:的一系列调用, NSDictionary没有valueForKeyPath:方法,因此您首先需要使用allValues将其转换为数组。或者,您可以在类别中实施valueForKeyPath:,可能从GnuStep'scocotron's开始(实际上不支持@unionOfObjects,但可以通过定义{来实现轻松扩展{1}}方法)。

答案 1 :(得分:1)

看起来你没有创建一个数组对象来输入你的名字。需要这样的代码:

names = [NSMutableArray array];

...在循环开始之前。这会创建一个空的可变数组。