JSON 解析を使用して値を表示するピッカービューがあります。サイトのいくつかの質問が既に解析とピッカービューに取り組んでいることを認識していますが、json ファイルの構造に関して私のものは少し異なります。json ファイルのサンプルを次に示します。
[
{
"model":"juice",
"id" :
[
{
"version": "version01"
},
{
"version": "version02"
}
]
},
{
"model":"cream",
"id" :
[
{
"version": "cream01"
},
{
"version": "cream02"
}
]
}
]
そして私の.mファイル
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL * serverhost = [NSURL URLWithString:@"http://my.json"];
NSError *error;
NSData * Data = [NSData dataWithContentsOfURL: serverhost];
self.modelsArray= [NSJSONSerialization JSONObjectWithData:Data options:NSJSONReadingAllowFragments error:&error];
NSLog(@"%@", modelsArray);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
if (component == departments)
return [self.modelsArray count];
return [self.versionsArray count];
}
#pragma mark Picker Delegate Methods
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == departments)
return [[self.modelsArray objectAtIndex:row]objectForKey:@"model"];
return [[[self.versionsArray objectAtIndex:row]objectForKey:@"model"]objectForKey:@"version"];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent: (NSInteger)component
{
if (component == departments)
{
NSString * selectedRow = [[self.modelsArray objectAtIndex: row] valueForKey:@"version"];
NSArray * array = [sybreDepts objectForKey:selectedRow];
self.
}
}
@end
基本的に、最初の列でジュースまたはクリームなどのモデルを選択すると、2 番目の列にその内容が表示され、キーが「バージョン」であるため、ジュースを選択すると「version01」と「version02」が 2 番目の列に表示されます。
行に関してはreturn [[[self.versionsArray objectAtIndex:row]objectForKey:@"model"]objectForKey:@"version"];
、エラーが発生するため、正しく実行されたとは思えません
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0xa18c450' . Any suggestions ? Thanks