从另一个视图中的 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 中的注释(在 ios 6 和 ios 5.1 中)?