1

我想重新排序地图上显示的注释数组,以便创建一个下一个/上一个按钮,以便使用简单的迭代器快速循环浏览所有注释(按日期排序)。

据我所知,用作存储的注释数组[worldmap annotations]是不可变的,因此我无法对其重新排序。我尝试了以下方法来创建注释数组的临时副本,按日期对其进行排序并重新附加它。

(世界地图是我的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包含ifuserLocation您已showsUserLocation打开(但您自己并未明确要求addAnnotation),因此注释顺序将不是您所期望的。

不要依赖地图视图数组 中注释的顺序。annotations

相反,保留您自己的对注释的引用数组,并以您想要的任何方式对它们进行排序(如您的annotationSort数组)。
但是将它们从地图中删除并重新添加是没有意义的。

请记住,地图视图的annotations数组可能包含MKUserLocation注释,因此在构建数组时,请在包含每个注释或访问自定义属性之前检查每个注释的类型。


但是,请注意对数组进行排序的代码:

[annotationSort sortedArrayUsingComparator:...

本身有缺陷,因为sortedArrayUsingComparator 返回一个NSArray.
它不会就地对数组进行排序。

相反,要对 进行排序NSMutableArray,请调用其sortUsingComparator方法。


使用此排序数组,您的应用可以按所需顺序访问或选择注释。

于 2012-10-22T21:45:54.703 回答