2011-10-12 83 views
0

我正在开发一个使用GOogle Places API的程序,它有两个功能:searchPlaces和loadPlaceDetails。JSON没有被解析

函数loadPlaceDetails使用searchPlaces函数的相同代码(自适应),但它没有正确返回数据。

下面,是loadPlaceDetails函数的代码:

- (NSString *)loadPlaceDetails{ 

    NSString *myJson = [[NSString alloc] initWithContentsOfURL: 
          [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/details/json?reference=CnRlAAAATXOCsnqUpz9GCU61PDw2GokDo2DTa_EWsUIDsfx5Fz5SF42iSarv-xE-smvnA6cY_kWbYIFte07Cu-_RsFvLewld_onmhaDvj_lsStNhoDzi_sTpOVhZywIH_8Y5YkrkudefaMF0J9vzUt_LfMzL2xIQXkCcDhJBwamOWFtvAXoAQRoUjwnYvrXeuYy6-ALt1enT1kRfDO4&sensor=true&key=AIzaSyBLY-lBALViJ6ybrgtOqQGhsCDQtsdKsnc"]]; 

    if ([myJson length] == 0) { 
     [myJson release]; 
     return @"Error"; 
    } 

    // Create a dictionary from the JSON string 
    NSDictionary *results = [myJson JSONValue]; 

    NSArray *place = [results objectForKey:@"results"]; 

    placeDetailName = [[NSMutableString alloc] init]; 
    placeDetailAddress = [[NSString alloc] init]; 
    placeDetailLat = [[NSString alloc] init]; 
    placeDetailLng = [[NSString alloc] init]; 
    placeDetailUrl = [[NSString alloc] init]; 
    placeDetailPhone = [[NSString alloc] init]; 

    for (NSDictionary *element in place) 
    { 
     NSString *name = [element objectForKey:@"name"]; 
     [placeDetailName stringByAppendingFormat:@"%@",name]; 
     NSLog(@"Nome do estabelecimento: %@",placeDetailName); 

     NSString *address = [element objectForKey:@"formatted_address"]; 
     [placeDetailAddress stringByAppendingFormat:@"%@",address]; 
     NSLog(@"%@",address); 

     NSString *phone = [element objectForKey:@"formatted_phone_number"]; 
     [placeDetailPhone stringByAppendingFormat:@"%@",phone]; 
     NSLog(@"%@",phone); 

     NSString *url = [element objectForKey:@"url"]; 
     [placeDetailUrl stringByAppendingFormat:@"%@",url]; 
     NSLog(@"%@",url); 
    } 

    for (NSDictionary *result in [results objectForKey:@"results"]) 
    { 
     NSDictionary *location = [[result objectForKey:@"geometry"] objectForKey:@"location"]; 
     NSString *latitude = [[location objectForKey:@"lat"] stringValue]; 
     NSString *longitude = [[location objectForKey:@"lng"] stringValue]; 
     [placeDetailLat stringByAppendingFormat:@"%@",latitude]; 
     [placeDetailLng stringByAppendingFormat:@"%@",longitude]; 
    } 

    NSString *basicurl = @"http://www.(...)/(...)/directions.html"; 
    NSString *funcao = @"loaddetailplace"; 
    NSMutableString *placesURL = [NSMutableString string]; 

    [placesURL appendString:[NSString stringWithFormat:@"%@?function=",basicurl]]; 
    [placesURL appendString:[NSString stringWithFormat:@"%@&latorigem=",funcao]]; 
    [placesURL appendString:[NSString stringWithFormat:@"%@&lngorigem=",placeDetailLat]]; 
    [placesURL appendString:[NSString stringWithFormat:@"%@",placeDetailLng]]; 

    return placesURL; 

} 

当我在节目中(同一类)的地方调用它,它返回http://www.(...)/(...)/directions.html?function=loaddetailplace&latorigem=&lngorigem=

它不处理函数的其他部分。我不知道可能发生了什么,如果有人帮助我,我会很感激!

谢谢!

回答

1

该函数与返回的JSON不匹配。

在你的功能,你有,例如:

NSArray *place = [results objectForKey:@"results"]; 

虽然返回数组的第一级包含类似:

"result": { 
    "address_components": [], 
    "formatted_address": "CRS 504 Bl B s/n lj 61 - Brasília - DF, 70331-525, Brasil", 
    "formatted_phone_number": "(61) 3224-0625", 
    "geometry": {}, 
    "icon": "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png", 
    "id": "6c85c1faf37814d6d6ca8bea9576cbb49eece4f5", 
    "international_phone_number": "+55 61 3224-0625", 
    "name": "Banco Itaú S/A", 
    "reference": "CnRlAAAA73YR15TKnyhpZQrt7Cgi6QfWkgtZD5jXemeoAIjeoS52LwfkxcjikEJZu0gkmg0519e9NWh5fuuGjzgN_B1qO1e7RuaI1ZgbpB5eXpflLWS1jJXUfjDfIflVyn017XXI56KQf0Qxd15WSiXFXDQu9xIQQ2M0WexDH9WwBgw0IvPCXxoUihDOTi3Qrx8RNRhmVJgivqnoxng", 
    "types": [], 
    "url": "http://maps.google.com/maps/place?cid=944480254308386018", 
    "vicinity": "CRS 504 Bl B s/n lj 61 - Brasília" 
} 

在第一个层次,你有一个的NSDictionary(不是NSArray)'结果'(不是结果)。我建议查看您使用的URL返回的JSON格式。