以下是我的代码。当循环NSArray
NSDictionary
个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);
}
仅包含最后一条记录。
NSArray
日志结果: 测试1 TEST2 TEST3 TEST4
当附加到{{1}}(项目名称)时,我收到了最后的数据..
答案 0 :(得分:5)
每次循环迭代都会初始化新数组,不会向数组中添加新对象。 要做到这一点,你必须在循环之前创建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);
答案 1 :(得分:3)
将alloc
语句保留在for循环之外并使用NSMutableArray
,然后在for循环内部继续添加到此数组中。
NSMutableArray *projectNames = [[NSMutableArray alloc] init];
for(...)
{
[projectNames addObject: anyObject];
}
答案 2 :(得分:1)
环境:
_projectpicker.delegate = self;
_projectpicker.dataSource = self;
循环中的没有多大意义。你不需要多次这样做。
虽然其他答案准确地描述了您对阵列的错误,但使用KVC可以更简洁地实现您当前的要求:
NSArray *projectNames = [entries valueForKey:@"NM_PROJECT"];
(那时你根本不需要你自己的循环)