如何在MKMap上连续更新MKAnnotation坐标

时间:2012-01-24 20:51:07

标签: ios mkmapview mkannotation coordinate

我有一个GPSTestViewController类,它有一个MKMapView,添加了MKAnnotations(存储在一个名为Bases的类中)。我正在尝试不断更新MKAnnotations的坐标(使用Bases中的updateBaseInformation方法),以便基础在地图上移动。从GPSTestViewController方法locationUpdate调用更新(因为它每秒调用一次):

- (void)locationUpdate:(CLLocation *)location {
    NSLog(@"locationUpdate");
    self.cachedLocation = location;
    [self centerTo:cachedLocation.coordinate];
    //Trying to update the coordinates every second
    [bases updateBaseInformation];   <--Program received signal: “EXC_BAD_ACCESS”
    return;
}

但后来我收到以下消息: [bases updateBaseInformation];程序收到信号:“EXC_BAD_ACCESS”

Bases.m包含以下代码(即使某些代码被注释,它也会崩溃):

- (void)updateBaseInformation {
   NSLog(@"Updating base information");
   for(MyAnnotation *a in bases)
   {
       //CLLocationCoordinate2D c;
       if([a.type compare:@"friend"] == 0)
       {
           //c.latitude = a.coordinate.latitude+0.001;
           //c.longitude = a.coordinate.longitude+0.001;
           //a.coordinate = c;
       }
       else if([a.type compare:@"enemy"] == 0)
       {
       //[a setCoordinate:CLLocationCoordinate2DMake(a.coordinate.latitude+0.002, a.coordinate.longitude+0.0012)];
       }
   }

}

我的猜测是我正在访问已在其他地方访问过的对象并导致EXC_BAD_ACCESS。我花了很多时间进行搜索,但没有结果。为什么我会收到此错误,我该怎么做才能让Annotations在地图上移动?

我已将整个项目上传到(已删除链接)。

解决方案 问题现在解决了。问题是持有Annotations的数组是自动释放的。所以我改变了

的分配方式

bases = [NSMutableArray array];

bases = [[NSMutableArray array] retain];

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

我的猜测是我访问了已经访问过的对象   在其他地方

您可能正在访问内存中不再存在的对象 - 您需要检查是否要取消分配您随后访问的对象。您应该为您的方案启用Zombies,这样您可以通过在释放对象后有效地保持对象的内存处于监视状态,从而查看何时访问已解除分配的对象。你可以在这里打开它们:Scheme / edit scheme / enable zombie objects。