我想知道是否有人以前见过这种情况,我认为 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,我希望尽快收到他们的消息。