使用当前位置数据时,CLGeocoder会返回城市和州的空结果

时间:2014-01-17 20:10:09

标签: ios objective-c addressbook cllocation clgeocoder

您好我正在尝试使用CLGeocoder获取城市和州的名称。但是,placemark.addressDictionary将返回我:

{     FormattedAddressLines =(         “南大西洋”     );     名称=“南大西洋”;     海洋=“南大西洋”; }

和地标是: 南大西洋,南大西洋@< -42.60533670,-21.93128480> +/- 100.00m,区域CLCircularRegion(标识符:'< -41.51023865,-31.60774370> radius 4958095.65',中心:< -41.51023865,-31.60774370>,半径:4958095.65m)

此外,[placemark locality]和[placemark administrativeArea]的NSLog都显示为nil。

还尝试添加ABAdressBookUI,ABAdressBook框架并获取数据:

NSString * addressDict = ABCreateStringWithAddressDictionary(placemark.addressDictionary,NO);它返回一个空描述的对象。

或尝试过: NSString * state =(NSString *)[placemark.addressDictionary objectForKey:kABPersonAddressStateKey];它会抛出不兼容的指针类型的警告。

如果有任何可能的解决方案,或者我遗失了某些内容,请告诉我。

点击当前位置按钮时的代码如下:

CLLocation * loc;

loc = [[CLLocation alloc] initWithLatitude:[KLocationManager sharedManager]._locationManager.location.coordinate.latitude    longitude:[KLocationManager sharedManager]._locationManager.location.coordinate.longitude];

CLGeocoder* geocoder = [[CLGeocoder alloc] init];

[geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
    CLPlacemark* placemark = [placemarks objectAtIndex:0];
    if (placemark) {
        NSDictionary* dic = placemark.addressDictionary;
        NSString* locName = [NSString stringWithFormat:@"%@, %@", [dic objectForKey:@"City"],[dic objectForKey:@"State"]];
        CLLocation* loc = placemark.location;

        self.returnLocationDict = @{@"name":locName, @"location":loc};
    }
}];

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

复制您正在经历的内容的一种方法是使用纬度和经度为0,0的CLLocation

我使用纬度运行你的代码:37.3318经度:-122.0312(无限循环..)它按预期工作。

您的位置经理可能没有回复您的期望。