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 在模拟器中正常工作,但在设备上*看起来*为空