0

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

函数 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=

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

谢谢!

4

1 回答 1

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 格式。

于 2011-10-12T02:27:57.947 回答