这是我第一次做iOS应用程序,所以我可能不知道一些看似简单的东西。请耐心等待我=)UIPickerView无法显示JSON数组数据
基本上,我需要用我的JSON数据填充我的UIPickerView。我已经成功解析了我的JSON数据,并提取了我需要的内容并将它们放置到NSMutableArray中。当我第一次尝试做UIPickerView时,我使用了硬编码数组,并且一切正常。现在,当我尝试用我的JSON数组替换硬编码数组时,我一直得到一个空的JSON数组。它的工作方式,似乎UIPickerView试图在我的JSON数组填充之前拉出所有东西。
我已经尝试重新加载UIPickerView,建议在本网站的其他地方,它也不工作。
下面是我的代码部分:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
dispatch_async(randomiserBgQ, ^{
NSData* data = [NSData dataWithContentsOfURL:randomiserCatURL];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}
- (void)fetchedData:(NSData *)responseData{
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSArray* randomiserCat = [json objectForKey:@"categories"];
self.randCatSel =[[NSMutableArray alloc] init];
NSLog(@"categories: %@", randomiserCat);
for (int i = 0; i < [randomiserCat count]; i++) {
NSDictionary *dict = [randomiserCat objectAtIndex:i];
NSString* parent = [dict objectForKey:@"name"];
[self.randCatSel addObject:parent];
NSArray* childrenArray = [dict objectForKey:@"children"];
for (int i = 0; i < [childrenArray count]; i++) {
NSDictionary* dict = [childrenArray objectAtIndex:i];
NSString* children = [dict objectForKey:@"name"];
[self.randCatSel addObject:children];
NSArray* grandchildrenArray = [dict objectForKey:@"grandchildren"];
for (int i = 0; i < [grandchildrenArray count]; i++) {
NSDictionary* dict = [grandchildrenArray objectAtIndex:i];
NSString* grandchildren = [dict objectForKey:@"name"];
[self.randCatSel addObject:grandchildren];
}
}
}
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
return [self.randCatSel count];
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [self.randCatSel objectAtIndex:row];
}
正如你所看到的,我试图分析我的JSON数据的方式,我用了这么长的方法,因为我有阵列在几级JSON数据。如果有更快的方法(如PHP中的foreach
),请指出我正确的方向。
到目前为止,我的UIPickerView得到一个空的randCatSel
数组(我认为它是在它被填充之前加载它)。
你可以在json解析后使用'[pickerViewObj reloadAllComponents];''。 –
与foreach一样,您可以使用for(NSDictionary * dic in randomiserCat) – mak
避免在获取数据之前显示选取器。然后重新加载选取器。 – mak