我想知道是否有人以前见过这个,我认为(initWithCoordinate)的GeoCoding例程的Xcode中有一个错误,地址的PlaceMark(MKPlaceMark)被放置到MapItem中。
考虑下面的代码,在我通过CLPlaceMark将GeoCoded位置(即Lat/Lon)返回到文本类型地址后,我正在循环处理结果,将其转换为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对象中,然后读回来,我看到上面提到的三个键的以下输出不同,从输出(前一个/是"前"值,后一个是"后"值):
SubAdminArea:'伦敦/(null)'SubThoroughfare:"21-35/(空)"直通车:"汉诺威路/21-35号">
我想知道是否有人看到过这个bug,或者你们是否可以提出其他建议。
此外,我尝试手动用覆盖坏的
[MapItem setValue:[PlaceMark_MK thoroughfare] forKey:@"thoroughfare"];
然而,我犯了一个错误,因为这不起作用,不确定你们是否见过这个。
你觉得怎么样?
谢谢&问候,
Heider Sati
----------------------------------------编辑:(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的字典中!,我想,除非有人知道什么更好的东西,否则我现在将依靠手工词典来存储这些内容。
如果你有同样的问题,我希望这能有所帮助。
我现在不会把这个问题标记为"已回答",因为我即将与苹果公司交谈,看看这是一个错误还是"功能":)
谨致问候海德尔
----------------------------------------->编辑,一小时后。。。
我刚刚向苹果提交了一份错误报告,参考号:16026923,我希望很快能收到他们的消息。
在与苹果公司就上述错误进行了交谈后,IOS-8中已经修复了此错误,我对其进行了测试,并确认现在可以工作。
问候海德尔