OGeek|极客世界-中国程序员成长平台

标题: ios - UIPickerView 为空,数据源为 JSON 数组 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 22:16
标题: ios - UIPickerView 为空,数据源为 JSON 数组

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

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

这是我的代码:

- (NSInteger)numberOfComponentsInPickerViewUIPickerView *)pickerView 
{
    return 1;
}

-(NSInteger)pickerViewUIPickerView *)pickerView numberOfRowsInComponentNSInteger)component
{
    //set number of rows
    return self.terrainJsonArray.count;
}

-(NSString *)pickerViewUIPickerView *)pickerView titleForRowNSInteger)row forComponentNSInteger)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);
}



Best Answer-推荐答案


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

viewDidLoad 中,您正在声明和记录一个名为 terrainJsonArraylocal 变量。此局部变量与实例变量无关。

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

改变这一行:

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

到:

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

关于ios - UIPickerView 为空,数据源为 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831852/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4