我尝试使用解析为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);
}
答案 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];