Question

I'm developing a program using GOogle Places API and it has two functions: searchPlaces and loadPlaceDetails.

The function loadPlaceDetails is using the same code of the searchPlaces function (adapted) but it is not returning the data correctly.

Below, is the code of the loadPlaceDetails function:

- (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;

}

When I call it somewhere in the program (same class), it returns http://www.(...)/(...)/directions.html?function=loaddetailplace&latorigem=&lngorigem=.

It is not processing the other parts of the function. I don't know what may be happening and would be grateful if someone helped me!

Thanks!

Was it helpful?

Solution

The function is not matching the returned JSON.

In your function, you have, for example:

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

While the first level of the returned array contains something like:

"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"
 }

In the first level, you have a NSDictionary (not a NSArray) 'result' (not results). I would suggest to review the JSON format returned by the URL the you are using.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top