0

我想知道是否有人以前见过这种情况,我认为 Xcode 中 (initWithCoordinate) 的 GeoCoding 例程中存在一个错误,其中地址的 PlaceMark (MKPlaceMark) 被放置到 MapItem 中。

考虑下面的代码,在我通过 CLPlaceMark 将地理编码位置(即纬度/经度)返回到文本类型地址后,我循环遍历结果以将它们转换为 MKPlaceMark 并将它们存储为 MapItems,但是,在运行时,我意识到 Xcode/IOS 可以很好地复制大多数地址密钥,但是弄乱了对地址非常重要的(SubAdminArea、SubThoroughfare 和 Thoroughfare)的密钥。请看下面我的代码片段:

         for (int i=0; i < PlaceMarks.count; i++)
         {
             PlaceMark_CL = [PlaceMarks objectAtIndex:i];
             PlaceMark_MK = [[MKPlacemark alloc] initWithCoordinate:PlaceMark_CL.location.coordinate addressDictionary:PlaceMark_CL.addressDictionary];
             MapItem = [MapItem initWithPlacemark:PlaceMark_MK];
             [MapItem setName:PlaceMark_MK.name];


             NSLog(@"GeoCoded: SubLocality: '%@ / %@', Locality: '%@ / %@', AdministrativeArea: '%@ / %@', Country: '%@ / %@', CountryCode: '%@ / %@', InLandWater: '%@ / %@', ISOCode: '%@ / %@', Name: '%@ / %@', Ocean: '%@ / %@', PostCode: '%@ / %@', SubAdminArea: '%@ / %@', SubLocality: '%@ / %@', SubThoroughfare: '%@ / %@', Thoroughfare: '%@ / %@', Title: '%@ / %@'"
                   , [PlaceMark_MK subLocality]
                   , MapItem.placemark.subLocality
                   , [PlaceMark_MK locality]
                   , MapItem.placemark.locality
                   , [PlaceMark_MK administrativeArea]
                   , MapItem.placemark.administrativeArea
                   , [PlaceMark_MK country]
                   , MapItem.placemark.country
                   , [PlaceMark_MK countryCode]
                   , MapItem.placemark.countryCode
                   , [PlaceMark_MK inlandWater]
                   , MapItem.placemark.inlandWater
                   , [PlaceMark_MK ISOcountryCode]
                   , MapItem.placemark.ISOcountryCode
                   , [PlaceMark_MK name]
                   , MapItem.placemark.name
                   , [PlaceMark_MK ocean]
                   , MapItem.placemark.ocean
                   , [PlaceMark_MK postalCode]
                   , MapItem.placemark.postalCode
                   , [PlaceMark_MK subAdministrativeArea]
                   , MapItem.placemark.subAdministrativeArea
                   , [PlaceMark_MK subLocality]
                   , MapItem.placemark.subLocality
                   , [PlaceMark_MK subThoroughfare]
                   , MapItem.placemark.subThoroughfare
                   , [PlaceMark_MK thoroughfare]
                   , MapItem.placemark.thoroughfare
                   , [PlaceMark_MK title]
                   , MapItem.placemark.title
                   );

             [TempSearchResultsSorted addObject:MapItem];
         }

好吧,有了以上内容,几乎所有内容都可以正常复制,并且可以很好地提取,但是,遗憾的是,对于上面提到的 3 个键,在通过标准 (initWithCoordinate) 例程从 MKPlaceMark 复制到 MapItem 对象然后将其读回时,对于上面提到的 3 个键,我看到以下输出与输出不同(前一个 / 是“前”值,后一个是“后”值):

SubAdminArea: 'London / (null)' SubThoroughfare: '21-35 / (null)' Thoroughfare: 'Hanover Road / 21-35 Hanover Road'

我想知道是否有人看到过这个错误,或者你们是否可以提出其他建议。

另外,我尝试使用以下方法手动覆盖坏的:

             [MapItem setValue:[PlaceMark_MK thoroughfare] forKey:@"thoroughfare"];

但是,出现错误,因为这不起作用,不知道你们是否看到了这个。

你怎么看?

感谢和问候,

海德·萨蒂

---------------------------------------- 编辑:(2小时后)...

此外,我只是浏览了每个函数生成的字典项,才发现我对 MKMapItem 如何完全忽略 3 个元素并且只在请求时“隐藏”输出时感到震惊,因为新字典中不存在确切的值,请看下面我用来转储内容的代码:

             NSLog(@"CL:");
             for (NSString *Key in PlaceMark_CL.addressDictionary)
             {
                 id Value = [PlaceMark_CL.addressDictionary objectForKey:Key];
                 NSLog(@"%@, = '%@', ", Key, Value);
             }

             NSLog(@"MK:");
             for (NSString *Key in PlaceMark_MK.addressDictionary)
             {
                 id Value = [PlaceMark_MK.addressDictionary objectForKey:Key];
                 NSLog(@"%@, = '%@', ", Key, Value);
             }

             NSLog(@"MI:");
             for (NSString *Key in MapItem.placemark.addressDictionary)
             {
                 id Value = [MapItem.placemark.addressDictionary objectForKey:Key];
                 NSLog(@"%@, = '%@', ", Key, Value);
             }

使用上面,你可以清楚地看到字典的MI部分下,(Thoroughfare,SubThoroughfare和SubAdminArea)这3个元素没有复制到MKMapItem的字典中!,我想我会依靠手工制作的字典除非有人知道更好的东西,否则暂时将它们存储起来。

如果您遇到同样的问题,我希望这会有所帮助。

我现在不会将问题标记为“已回答”,因为我即将与 Apple 交谈以查看这是错误还是“功能”:)

亲切的问候海德

-----------------------------------------> 编辑,一小时后...

我刚刚向 Apple 提交了错误报告,参考编号:16026923,我希望尽快收到他们的消息。

4

1 回答 1

0

在与 Apple 讨论上述错误后,这已在 IOS-8 中修复,我对其进行了测试并确认现在可以正常工作。

问候海德

于 2015-01-09T17:34:03.923 回答