我无法在一组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)
答案 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's或cocotron's开始(实际上不支持@unionOfObjects
,但可以通过定义{来实现轻松扩展{1}}方法)。
答案 1 :(得分:1)
看起来你没有创建一个数组对象来输入你的名字。需要这样的代码:
names = [NSMutableArray array];
...在循环开始之前。这会创建一个空的可变数组。