1

単純な反復子を使用してすべての注釈 (日付で並べ替え) をすばやく循環するための次/前のボタンを作成するために、マップに表示される注釈の配列を並べ替えたいと思います。

私が見る限り、ストア[ワールドマップ注釈]として使用される注釈配列は可変ではないため、並べ替えることができません。以下を試して、注釈配列の一時コピーを作成し、日付で並べ替えて、再度添付しました。

( worldmapは私の MKMapView オブジェクトです)

//COPY
 NSMutableArray *annotationSort = [[NSMutableArray alloc]initWithArray:[worldmap annotations]];

//SORT
[annotationSort sortedArrayUsingComparator:^NSComparisonResult(EventPin* obj1, EventPin* obj2) {
     return [obj1.eventItemObject.eventDateBegin compare: obj2.eventItemObject.eventDateBegin];
 }];

//ADDED SORTED ARRAY
[worldmap removeAnnotations:[worldmap annotations]];
[worldmap addAnnotations:annotationSort];

これはうまくいかないようです。MKMapKit 注釈配列をどのように並べ替えることができますか?

4

1 に答える 1

1

リンクされた質問の回答が述べているように、マップビューのannotationsプロパティが任意の順序を保持するという保証はありません。

さらに、annotationsプロパティには、オンにしたuserLocation場合(ただし、明示的に要求しない場合)が含まれているため、注釈の順序は期待どおりではありません。showsUserLocationaddAnnotation

マップビューの配列 内の注釈の順序に依存しないでください。annotations

代わりに、注釈への参照の独自の配列を保持し、任意の方法(配列など)で並べ替えますannotationSort
しかし、それらをマップから削除して再度追加しても意味がありません。

マップビューのannotations配列にはMKUserLocation注釈が含まれている可能性があることに注意してください。配列を作成するときは、注釈を含める前、またはカスタムプロパティにアクセスする前に、各注釈のタイプを確認してください。


ただし、配列を並べ替えるコードは次のとおりです。

[annotationSort sortedArrayUsingComparator:...

sortedArrayUsingComparator を返すため、それ自体に欠陥がありますNSArray
配列をインプレースでソートしません。

代わりに、を並べ替えるには、そのメソッドNSMutableArrayを呼び出します。sortUsingComparator


このソートされた配列を使用して、アプリは希望の順序でアノテーションにアクセスまたは選択できます。

于 2012-10-22T21:45:54.703 に答える