0

誰かがこれを前に見たことがあるのだろうか、アドレスの 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 です。すぐに連絡が来ることを願っています。

4

1 に答える 1

0

上記のバグに関して Apple と話し合った後、これは IOS-8 で修正されました。私はそれをテストし、現在動作していることを確認しました。

よろしくハイダー

于 2015-01-09T17:34:03.923 に答える