UIPickerView 为空,数据源为 JSON 数组

Posted

技术标签:

【中文标题】UIPickerView 为空,数据源为 JSON 数组【英文标题】:UIPickerView empty with data source as JSON array 【发布时间】:2012-03-22 23:05:27 【问题描述】:

我正在尝试使用解析为 NSArray 的 JSON 数据填充 UIPickerView。

控制台显示 JSON 正在正确解析,但 UIPickerView 仍为空。

这是我的代码:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

    return 1;


-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

    //set number of rows
    return self.terrainJsonArray.count;


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

    //set item per row
    return [self.terrainJsonArray objectAtIndex:row];


- (void)viewDidLoad

    [super viewDidLoad];

    // Parse JSON 

    NSString *terrainString = [NSString stringWithFormat:@"http://terrainracing.com/ios/events_json.php"];

    NSURL *terrainUrl = [NSURL URLWithString:terrainString];

    NSData  *terrainData = [NSData  dataWithContentsOfURL:terrainUrl];

    NSError *error;

    NSArray *terrainJsonArray = [NSJSONSerialization JSONObjectWithData:terrainData options:kNilOptions error:&error];

    NSLog(@"%@", terrainJsonArray);

【问题讨论】:

【参考方案1】:

选择器视图委托方法正在查看类实例变量self.terrainJsonArray(实际上它是实例变量的属性getter)。

viewDidLoad 中,您声明并记录了一个名为terrainJsonArray本地 变量。此局部变量与实例变量无关。

您必须在 viewDidLoad 中收到编译器警告,例如“'terrainJsonArray' 的本地声明隐藏实例变量”。

改变这一行:

NSArray *terrainJsonArray = [NSJSONSerialization JSONObjectWithData:terrainData options:kNilOptions error:&error];

到:

self.terrainJsonArray = [NSJSONSerialization JSONObjectWithData:terrainData options:kNilOptions error:&error];

【讨论】:

非常感谢!解决了它。这是我的第一个应用程序,不是来自教程,所以我仍在学习实例/本地等之间的差异。 另外,对不起,我不能投票给答案,我是论坛的新手,还不允许。

以上是关于UIPickerView 为空,数据源为 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 在模拟器中正常工作,但在设备上*看起来*为空

UIPickerView 无法显示 JSON 数组数据

使用 UIPickerView 从 json 加载数据

带有 JSON 的 UIPickerView

UIPickerView 未使用最新的 JSON 数据重新加载

UIPickerView 中的另一个 JSON 数据