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, я протестировал ее и подтвердил, что теперь работаю.

С уважением Хайдер

Другие вопросы по тегам