使用纬度和经度显示位置字符串

时间:2016-10-12 06:15:21

标签: ios objective-c

我正在使用此方法显示使用当前位置纬度和经度的位置字符串,但它显示的方式不同

NSString *urlString = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=false",location.coordinate.latitude, location.coordinate.longitude];
NSError* error;
NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString] encoding:NSASCIIStringEncoding error:&error];

NSData *data = [locationString dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

NSDictionary *dic = [[json objectForKey:@"results"] objectAtIndex:0];
NSArray* arr = [dic objectForKey:@"address_components"];
//Iterate each result of address components - find locality and country
NSString *cityName;
NSString *countryName;
for (NSDictionary* d in arr)
{
    NSArray* typesArr = [d objectForKey:@"types"];
    NSString* firstType = [typesArr objectAtIndex:0];
    if([firstType isEqualToString:@"locality"])
        cityName = [d objectForKey:@"long_name"];
    if([firstType isEqualToString:@"country"])
        countryName = [d objectForKey:@"long_name"];

}

NSString* locationFinal = [NSString stringWithFormat:@"%@,%@",cityName,countryName];
NSLog(@"Final Location %@ ",locationFinal);

但最终位置显示此类型: -

Final Location नठदिलà¥à¤²à¥,India

为何显示此类型?任何人都可以知道这一点。

2 个答案:

答案 0 :(得分:0)

请提供API参数的语言。如果未提供语言,则地理编码器会尝试使用Accept-Language标头中指定的首选语言,或者发送请求的域的本地语言。

因此,请像使用语言参数一样替换代码。

2

再试一次。

答案 1 :(得分:0)

我认为这是一个未初始化的变量,它指向随机记忆。

尝试:

NSString *cityName = nil;
NSString *countryName = nil;

短信for循环:

for (NSDictionary* d in arr)
{
    // Add this after the existing code:
    if (cityName && countryName)
        break;
}

并在显示结果前检查错误:

if (cityName && countryName) {
    NSString* locationFinal = [NSString stringWithFormat:@"%@,%@",cityName,countryName];
    NSLog(@"Final Location %@ ",locationFinal);
} else {
    NSLog(@"Failed to find location");
}

最后,您的JSON处理代码根本不进行错误检查。这是一个错误。