下面是我的代码。当循环访问NSDictionary
对象的NSArray
并尝试附加到数组时,我保留了一个显示正确结果的NSLog
,但结果NSArray
仅包含最后一条记录。
for (NSDictionary *entry in entries) {
NSString* projID = [entry objectForKey:@"NM_PROJECT"];
NSArray *projectNames = [[NSArray alloc] initWithObjects:projID,nil];
_projectpicker.delegate = self;
_projectpicker.dataSource = self;
NSLog(@"Error : %@", projID);
}
日志结果:测试1测试2测试3测试4
当附加到NSArray
(项目名称)时,我正在获取最后的数据。
每次循环迭代都初始化新数组,不会向数组添加新对象。为此,您必须在循环之前创建 NSMutableArray 并在循环中添加对象:
NSMutableArray *projectNames = [[NSMutableArray alloc] init];
for (NSDictionary *entry in entries) {
NSString* projID = [entry objectForKey:@"NM_PROJECT"];
[projectNames addObject: projID];
_projectpicker.delegate = self;
_projectpicker.dataSource = self;
NSLog(@"Error : %@", projID);
}
NSLog(@"Array : %@", projectNames);
将语句保留alloc
在 for 循环之外并使用NSMutableArray
,然后根据需要从 for 循环内部继续添加到此数组中。
NSMutableArray *projectNames = [[NSMutableArray alloc] init];
for(...)
{
[projectNames addObject: anyObject];
}
设置:
_projectpicker.delegate = self;
_projectpicker.dataSource = self;
循环内部没有多大意义。您不需要多次执行此操作。
虽然其他答案准确地描述了您在阵列上做错了什么,但使用 KVC 可以更简洁地满足您当前的需求:
NSArray *projectNames = [entries valueForKey:@"NM_PROJECT"];
(那么你根本不需要自己的循环)