不推荐使用addressDictionary在iOS 11.0中不推荐使用

时间:2017-09-22 21:24:24

标签: xcode mapkit ios11 reverse-geocoding mkplacemark

刚刚开始研究IOS11,将我的代码从IOS10.3移到IOS11导致了以下挑战,而以下代码曾经在IOS11之前工作:

    CLGeocoder *GeoCoder = [[CLGeocoder alloc] init];
[GeoCoder reverseGeocodeLocation:_LocationManager.location completionHandler:^(NSArray *PlaceMarks, NSError *Error)
 {
     if (!Error)
     {
         MKPlacemark *PlaceMark_MK;

         if (PlaceMarks.count > 0)
         {
             MKPlacemark *PlaceMark = [PlaceMarks objectAtIndex:0];

             if (PlaceMark.location.coordinate.latitude != 0.0F && PlaceMark.location.coordinate.longitude != 0.0F)
             {
                 PlaceMark_MK = [[MKPlacemark alloc] initWithCoordinate:PlaceMark.location.coordinate addressDictionary:PlaceMark.addressDictionary];

...

现在使用IOS11,它抱怨PlaceMark.addressDictionary,而addressDictionary是不推荐使用的。

  不推荐使用

addressDictionary':首先在iOS 11.0中弃用 - 使用@properties

我尝试这样做,但不幸的是,无论如何,InitWithCoordinate函数都需要AddressDictionary。

我想知道是否有人有同样的问题,我知道这是非常新的(IOS11昨天刚出来)。

2 个答案:

答案 0 :(得分:2)

我想我还是找到了答案:

我替换了以下行:

PlaceMark_MK = [[MKPlacemark alloc] initWithCoordinate:PlaceMark.location.coordinate addressDictionary:PlaceMark.addressDictionary];

使用以下行:

PlaceMark_MK = [[MKPlacemark alloc] initWithCoordinate:PlaceMark.location.coordinate postalAddress:PlaceMark.postalAddress];

这似乎解决了这个问题。

答案 1 :(得分:0)

您需要通过以下属性进行访问

    var placemark = placemarks[0] as? CLPlacemark
    var address = "\(placemark?.thoroughfare ?? ""), \(placemark?.locality ?? ""), \(placemark?.subLocality ?? ""), \(placemark?.administrativeArea ?? ""), \(placemark?.postalCode ?? ""), \(placemark?.country ?? "")"
        print("\(address)")