這是我第一次做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