将 NSString 追加到 NSArray 时仅获取一个值



下面是我的代码。当循环访问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"];

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

最新更新