【问题标题】:UIPickerView empty with data source as JSON arrayUIPickerView 为空,数据源为 JSON 数组
【发布时间】: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);
}

【问题讨论】:

    标签: ios json uipickerview


    【解决方案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];
    

    【讨论】:

    • 非常感谢!解决了它。这是我的第一个应用程序,不是来自教程,所以我仍在学习实例/本地等之间的差异。
    • 另外,对不起,我不能投票给答案,我是论坛的新手,还不允许。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多