UIPickerView为空,数据源为JSON数组

时间:2012-03-22 23:05:27

标签: ios json uipickerview

我尝试使用解析为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 个答案:

答案 0 :(得分:2)

选择器视图委托方法正在查看类 实例 变量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];