2011-10-12 3 views
0

Google Places API를 사용하여 프로그램을 개발 중이며 searchPlaces 및 loadPlaceDetails의 두 가지 기능이 있습니다.JSON이 파싱되지 않습니다.

loadPlaceDetails 함수는 searchPlaces 함수의 동일한 코드를 사용하지만 (적용됨) 올바르게 데이터를 반환하지 않습니다. 내가 프로그램 (같은 클래스)에 어딘가를 호출 할 때

- (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=를 반환 아래

는 loadPlaceDetails 함수의 코드입니다.

함수의 다른 부분을 처리하지 않습니다. 나는 어떤 일이 일어날 지 모르고 누군가가 나를 도운다면 감사 할 것입니다!

감사합니다.

답변

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

을, 당신은 (A NSDictionary에이 NSArray가 아님) 'result'(결과가 아님). 사용중인 URL에서 반환 된 JSON 형식을 검토하는 것이 좋습니다.

관련 문제