我有一个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];
提前致谢。
答案 0 :(得分:0)
我的猜测是我访问了已经访问过的对象 在其他地方
您可能正在访问内存中不再存在的对象 - 您需要检查是否要取消分配您随后访问的对象。您应该为您的方案启用Zombies,这样您可以通过在释放对象后有效地保持对象的内存处于监视状态,从而查看何时访问已解除分配的对象。你可以在这里打开它们:Scheme / edit scheme / enable zombie objects。