PickerView 仅返回我的数组中添加的最后一个对象

Posted

技术标签:

【中文标题】PickerView 仅返回我的数组中添加的最后一个对象【英文标题】:PickerView returns only the last Object added in my array 【发布时间】:2013-09-26 09:23:47 【问题描述】:

我正在解析 JSON 文件中的一些数据

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"airports" ofType:@"json"];

NSString *jsonData = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];

NSArray *airports = [NSJSONSerialization JSONObjectWithData:[jsonData dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];


for (NSDictionary *result in airports)


    NSLog(@"%@ ", [result objectForKey:@"name"]);
    airportsArray = [[NSMutableArray alloc]init];
    [airportsArray addObject:[result objectForKey:@"name"]];



NSLOG 正确显示了所有机场,但是当 pickerView 仅显示我文件中的最后一个机场时。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

return 1
;

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:    (NSInteger)component
 
return [airportsArray count];

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row  forComponent:    (NSInteger)component

return [airportsArray objectAtIndex:row];

更新:感谢您的回复。我修复了我的代码。我只是在 For in 循环中分配数组。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"airports" ofType:@"json"];

NSString *jsonData = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];

NSArray *airports = [NSJSONSerialization JSONObjectWithData:[jsonData dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];

    airportsArray = [[NSMutableArray alloc]init];


for (NSDictionary *result in airports)


    NSLog(@"%@ ", [result objectForKey:@"name"]);
    [airportsArray addObject:[result objectForKey:@"name"]];



【问题讨论】:

你能用 NSLog(@"%@", airportsArray); 来检查你的 airportsArray 的内容吗? 【参考方案1】:

这是因为您在每次循环迭代时都分配 airportsArray

所以在循环外分配一次:

airportsArray = [[NSMutableArray alloc]init];
for (NSDictionary *result in airports)


    NSLog(@"%@ ", [result objectForKey:@"name"]);
    [airportsArray addObject:[result objectForKey:@"name"]];

【讨论】:

+1谢谢。 bneely 已经注意到我的“小”错误了! ;-)【参考方案2】:

发生的事情是您重复创建 airportsArray。然后你摧毁了在此之前的位置。

airportsArray = [[NSMutableArray alloc]init];

将此行移到您的 for...in 块之外。

【讨论】:

非常感谢!我完全没有注意到这一点。 ;-)

以上是关于PickerView 仅返回我的数组中添加的最后一个对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 的 PickerView 中返回两个单独的数组

多个文本字段的 PickerView 只显示一个数组

foreach 循环仅输出数组中的最后一个元素

数组推送仅推送数组的最后一个值

在 foreach 中调用类仅最后一次调用有效

ArrayList循环仅输出最后一项[重复]