将NSString附加到NSArray时只获取一个值

时间:2014-02-25 10:42:05

标签: ios objective-c nsarray

以下是我的代码。当循环NSArray NSDictionaryNSLog个对象并尝试追加到数组时,我保持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}}(项目名称)时,我收到了最后的数据..

3 个答案:

答案 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"];

(那时你根本不需要你自己的循环)