誰かがこれを前に見たことがあるのだろうか、アドレスの PlaceMark (MKPlaceMark) が MapItem に配置される (initWithCoordinate) の GeoCoding ルーチンに Xcode のバグがあると思います。
以下のコードを考えてみましょう。GeoCoded の場所、つまり Lat/Lon を CLPlaceMark 経由で text-type-address に戻した後、結果をループしてこれらを 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 つのキーに関しては、MKPlaceMark から標準 (initWithCoordinate) ルーチンを介して MapItem オブジェクトにコピーし、それを再度読み込んで、上記の 3 つのキーについて、次の出力が出力と異なることがわかります (/ の前のものは「前」の値で、後のものは「後」の値です)。
SubAdminArea: 'London / (null)' SubThoroughfare: '21–35 / (null)' Throughfare: 'Hanover Road / 21–35 Hanover Road'
誰かがこのバグを見たことがあるかどうか、または何か他のことを提案できるかどうか疑問に思います.
また、悪いものを手動で上書きしようとしました:
[MapItem setValue:[PlaceMark_MK thoroughfare] forKey:@"thoroughfare"];
ただし、これは機能しないため、エラーが発生しました。これを見たかどうかはわかりません。
どう思いますか?
ありがとうございます。それでは、お元気で、
ハイダー・サティ
---------------------------------------- 編集: (2時間後) ...
さらに、各関数によって生成されたディクショナリ項目を調べて、MKMapItem が 3 つの要素を完全に無視し、新しいディクショナリに正確な値が存在しないため、要求されたときにのみ出力を「シャドウ」する方法について GobSmacked であることがわかりました。 、内容をダンプするために使用した以下のコードを参照してください。
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に話しかけようとしているので、今のところ質問を「回答済み」としてマークしません:)
よろしくハイダー
----------------------------------------->編集、1時間後...
Apple にバグレポートを提出しました。参照番号: 16026923 です。すぐに連絡が来ることを願っています。