我正在努力查看为什么此代码无法正常工作。我有许多使用不同的JSON服务的其他视图。一切正常。但是,这根本不是。我按预期从服务中取回值,但是当尝试对其进行循环(请参见下面的代码)时,数组为Nil。显然,我错过了一些简单的事情,但是长期以来我一直在研究这个问题。
JSON服务的抽象视图;
{
"0": {
"altitude": "14500",
"latitude": "41.41555",
"longitude": "-73.09605",
"realname": "David KGNV"
},
"1": {
"altitude": "61",
"latitude": "33.67506",
"longitude": "-117.86739",
"realname": "Mark CT"
},
"10": {
"altitude": "38161",
"latitude": "40.51570",
"longitude": "-93.25554",
"realname": "Bob CYYZ"
},
"100": {
"altitude": "33953",
"latitude": "52.35600",
"longitude": "5.30384",
"realname": "Jim LIRQ"
}
}
JSON调用的抽象视图;
*注意,NSArray * currentMapArray valueKeyPath设置为“”,因为我需要JSON结果中的所有元素。
NSError *_errorJson = nil;
jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
if (_errorJson != nil) {
NSLog(@"Error %@", [_errorJson localizedDescription]);
} else {
//Do something with returned array
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *mapJson = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
//Loop through the JSON array
NSArray *currentMapArray = [mapJson valueForKeyPath:@""];
//set up array and json call
mapArray = [[NSMutableArray alloc]init];
for (int i = 0; i< currentMapArray.count; i++)
{
//create our object
NSString *nAltitude = [[currentMapArray objectAtIndex:i] objectForKey:@"altitude"];
NSString *nRealname = [[currentMapArray objectAtIndex:i] objectForKey:@"realname"];
NSString *nLatitude = [[currentMapArray objectAtIndex:i] objectForKey:@"latitude"];
NSString *nLongitude = [[currentMapArray objectAtIndex:i] objectForKey:@"longitude"];
[mapArray addObject:[[LiveVatsimMap alloc]initWithaltitude:nAltitude andrealname:nRealname andlatitude:nLatitude andlongitude:nLongitude]];
}
currentMapArray的结果为NIL,导致未正确填写NSString。
for (int i = 0; i< currentMapArray.count; i++)
当然,当我将JSON节点的值(即10)硬编码到ValueKeyPath中时,它将提供正确的数据结果并相应地进行填充。
有任何想法吗?很好...我只是这个目标的新手。
您的JSON没有数组-它是字典的字典。
您可以使用对其进行迭代
NSArray *keys=[jsonArray allKeys];
for (NSString *key in keys) {
NSDictionary *elementDictionary=jsonArray[key];
NSString *nAltitude = elementDictionary[@"altitude"];
NSString *nRealname = elementDictionary[@"realname"];
NSString *nLatitude = elementDictionary[@"latitude"];
NSString *nLongitude = elementDictionary[@"longitude"];
[mapArray addObject:[[LiveVatsimMap alloc]initWithaltitude:nAltitude andrealname:nRealname andlatitude:nLatitude andlongitude:nLongitude]];
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句