Xcode GeoCoding Функция initWithCoordinate путает Thoroughfare и другие 2 поля при чтении из MapItem
Интересно, если кто-нибудь видел это раньше, я думаю, что есть ошибка в XCode в подпрограмме GeoCoding (initWithCoordinate), когда PlaceMark адреса (MKPlaceMark) помещается в MapItem.
Рассмотрим код ниже, после того как я вернул GeoCoded местоположение, т.е. Lat/Lon в адрес типа текста через 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];
}
Что касается вышеизложенного, то почти все копируются нормально, и извлекаются нормально, однако, к сожалению, в отношении упомянутых выше трех ключей, после копирования из MKPlaceMark в объект MapItem через стандартную подпрограмму (initWithCoordinate) и последующего чтения обратно, Я вижу, что следующие выходные данные для указанных выше трех ключей отличаются от выходных данных (один до / является значением "до", а следующий после - "после"):
SubAdminArea: 'London / (null)' SubThoroughfare: '21 –35 / (null) 'Thoroughfare:' Hanover Road / 21–35 Hanover Road '
Интересно, видел ли кто-нибудь эту ошибку, или вы, ребята, можете предложить что-нибудь еще.
Также я попытался вручную переписать плохие с помощью:
[MapItem setValue:[PlaceMark_MK thoroughfare] forKey:@"thoroughfare"];
Однако, получил ошибку, так как это не сработало, не уверен, видели ли вы, ребята, это.
Как вы думаете?
С уважением,
Хайдер Сати
---------------------------------------- Редактировать: (через 2 часа) ...
Кроме того, я просто просматриваю элементы словаря, сгенерированные каждой функцией, чтобы выяснить, что я GobSmacked за то, как 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 из словаря 3 элемента (Thoroughfare, SubThoroughfare и SubAdminArea) не копируются в словарь MKMapItem!, Я думаю, что я буду полагаться на словарь ручной работы хранить их пока, если кто-то не знает ничего лучше.
Надеюсь, это поможет, если у вас возникла такая же проблема.
Я не буду помечать вопрос как "ответ" на данный момент, так как я собираюсь поговорить с Apple, чтобы увидеть, если это ошибка или "функция":)
С наилучшими пожеланиями Heider
-----------------------------------------> Отредактировано, через час...
Я только что отправил отчет об ошибке в Apple, номер ссылки: 16026923, надеюсь вскоре услышать от них.
1 ответ
После разговора с Apple по поводу вышеуказанной ошибки, она была исправлена в IOS-8, я протестировал ее и подтвердил, что теперь работаю.
С уважением Хайдер