从另一个视图中的 MKMapView 中删除注释

Posted

技术标签:

【中文标题】从另一个视图中的 MKMapView 中删除注释【英文标题】:Remove annotation from MKMapView which is in another view 【发布时间】:2010-05-18 05:45:03 【问题描述】:

我有两种观点。第一个是带有一些注释的MKMapView。单击UIButton 会在堆栈中推送第二个视图。这有一个UITableView,其中包含与地图注释相对应的注释列表。因此,当您单击删除按钮时,如何调用我在另一个视图中的MKMapView,以便我可以删除注释。我的 MKMapView 在我的应用程序委托以及我当前的类中声明。我正在尝试使用以下内容,但它不起作用:

RideAppDelegate *appDelegate = (RideAppDelegate *)[[UIApplication sharedApplication] delegate];
Annotation *ano;
CLLocationCoordinate2D anoPoint;
anoPoint.latitude = [[eventToDelete valueForKey:@"latitude"] doubleValue];
anoPoint.longitude = [[eventToDelete valueForKey:@"longitude"] doubleValue];
ano = [[[Annotation alloc] init] autorelease];
ano.coordinate = anoPoint;
[appDelegate.ridesMap removeAnnotation: ano];
[appDelegate release];

我一定是试图错误地访问我其他视图的MKMapView

【问题讨论】:

【参考方案1】: ridesMap 必须是 MKMapView,它必须是 appDelegate 的 ivar。它是(保留)的财产吗?它是使用self.ridesMap = [[MKMapView alloc] init] 或类似名称创建和分配的吗? 您确定 Annotation 遵循 MKAnnotation 协议?

(为什么要发布 appDelegate?你不拥有或保留它。)

【讨论】:

是的,我确信 Annotation 遵循 MKAnnotation 协议,因为我可以使用它创建注释。 ridesMap 是具有保留的属性。我应该在哪里创建它并像上面显示的那样分配 MKMapView? 如果它需要成为你的appDelegate中的一个属性,也许你应该在applicationDidFinishLaunching中创建它。如果它不是活动对象,则不能对其使用方法。

以上是关于从另一个视图中的 MKMapView 中删除注释的主要内容,如果未能解决你的问题,请参考以下文章

向 MKMapView 添加注释的最佳方法

从另一个类缩放 MkMapView

对 MKMapView 中的注释执行操作时泄漏

在启动时可靠地选择 MKMapView 中的注释(在 ios 6 和 ios 5.1 中)?

如何从 MKMapView didSelect 注释更新封装的 SwiftUI 视图

ios中Mkmapview中的自定义标注