在iOS元素中存储可变大小的JSON数组
我收到一个来自API的JSON回复,它返回上述内容。现有的iOS代码使用AFNetworking解析JSON。我能够将bidstatus存储为NSArray,将config存储为NSDictionary。但是,我无法正确存储lvlsubj。此对象看起来像一个具有可变大小的第二级数组的二维数组 我该怎么做呢 现有的代码非常简单在iOS元素中存储可变大小的JSON数组,ios,objective-c,json,Ios,Objective C,Json,我收到一个来自API的JSON回复,它返回上述内容。现有的iOS代码使用AFNetworking解析JSON。我能够将bidstatus存储为NSArray,将config存储为NSDictionary。但是,我无法正确存储lvlsubj。此对象看起来像一个具有可变大小的第二级数组的二维数组 我该怎么做呢 现有的代码非常简单 { "bidstatus":[ {"bidstatusid":"1","bidstatus":"Quoted"}, {"bidstatu
{
"bidstatus":[
{"bidstatusid":"1","bidstatus":"Quoted"},
{"bidstatusid":"2","bidstatus":"Closed"},
{"bidstatusid":"3","bidstatus":"Awarded"}
],
"config":{
"adminfee":"100",
"percentcommission":"10",
"premiumfee":"0"
},
"lvlsubj":{
"Primary 1":["English","Geography","Maths","Science"],
"Primary 2":["English","Geography","History"],
"Primary 3":["Maths","Science"]
}
}
多亏了上面的建议,我设法将它们存储起来并阅读 将其存储为NSDictionary
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSString* strRequestLink = [NSString stringWithFormat:@"%@%@", SERVICEPATH, @"get_var.php"];
[manager GET: strRequestLink
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
[GlobalPool sharedObject].m_dictPaymentConfig = [[responseObject valueForKey:@"config"] mutableCopy];
[GlobalPool sharedObject].m_arrayBidStatus = [[responseObject valueForKey:@"bidstatus"] mutableCopy];
//[GlobalPool sharedObject].m_arrayLevelSubject = [[responseObject valueForKey:@"lvlsubj"] mutableCopy];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
[self showServerConnectionError];
}];
然后使用allKeys在NSArray中存储密钥。使用这些键,从NSDictionary读取(它将返回数组)
这里的代码用键填充选择器。选择一个值后,它将从NSDictionary读取相应的对象(NSArray)并填充第二个选择器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSString* strRequestLink = [NSString stringWithFormat:@"%@%@", SERVICEPATH, @"get_var.php"];
[manager GET: strRequestLink
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
[GlobalPool sharedObject].m_dictPaymentConfig = [[responseObject valueForKey:@"config"] mutableCopy];
[GlobalPool sharedObject].m_arrayBidStatus = [[responseObject valueForKey:@"bidstatus"] mutableCopy];
[GlobalPool sharedObject].m_dictLevelSubject = [[responseObject valueForKey:@"lvlsubj"] mutableCopy];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
[self showServerConnectionError];
}];
-(iAction)操作选择器级别:(id)发送方{
NSArray*arrayKeys=[[GlobalPool sharedObject].m_dictLevelSubject allKeys];
if(arrayKeys.count==0)
返回;
[arrayPickerItems removeAllObjects];
for(int-nIdx=0;nIdx0?SelectedLevelIDX:0目标:自成功操作:@selector(itemWasSelected:element:)取消操作:@selector(actionPickerCancelled:)源:发件人];
}
-(iAction)actionChooseSubject:(id)发件人{
NSArray*arrayObject=[[GlobalPool sharedObject].m_dictLevelSubject objectForKey:self.m_lblSelectedLevel.text];
if(arrayObject.count==0)
返回;
[arrayPickerItems removeAllObjects];
for(int nIdx=0;nIdx0?SelectedSubjectIdx:0目标:自成功操作:@selector(itemWasSelected:element:)取消操作:@selector(actionPickerCancelled:)来源:发件人];
}
lvlsubj是一个字典,主1作为第一个键,它是一个数组。从lvlsubj检索后,与您对bid status所做的操作相同,对primary 1等进行操作。看起来lvlsubj
是nsarray
的NSDictionary
。因此,调用[lvlsubj objectForKey”“]
将返回一个数组。很抱歉,在我的手机上,或将评论作为答案,但无法正确测试。谢谢双方,我将尝试。
- (IBAction)actionChooseLevel:(id)sender {
NSArray* arrayKeys = [[GlobalPool sharedObject].m_dictLevelSubject allKeys];
if (arrayKeys.count == 0)
return;
[arrayPickerItems removeAllObjects];
for (int nIdx = 0; nIdx < arrayKeys.count; nIdx++)
{
NSMutableString* strInfo = [arrayKeys objectAtIndex:nIdx];
[arrayPickerItems addObject:strInfo];
}
[ActionSheetStringPicker showPickerWithTitle:@"Choose Level" rows:arrayPickerItems initialSelection:nSelectedLevelIdx > 0 ? nSelectedLevelIdx : 0 target:self successAction:@selector(itemWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender];
}
- (IBAction)actionChooseSubject:(id)sender {
NSArray* arrayObject = [[GlobalPool sharedObject].m_dictLevelSubject objectForKey:self.m_lblSelectedLevel.text];
if (arrayObject.count == 0)
return;
[arrayPickerItems removeAllObjects];
for (int nIdx = 0; nIdx < arrayObject.count; nIdx++)
{
NSMutableString* strInfo = [arrayObject objectAtIndex:nIdx];
[arrayPickerItems addObject:strInfo];
}
[ActionSheetStringPicker showPickerWithTitle:@"Choose Subject" rows:arrayPickerItems initialSelection:nSelectedSubjectIdx > 0 ? nSelectedSubjectIdx : 0 target:self successAction:@selector(itemWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender];
}