3

我正在构建一个在地图上跟踪用户位置的应用程序。我可以轻松插入图钉,但是当位置改变时,应用程序退出。

我在 viewdidload: 方法中将默认坐标设置为 0,0,并在该位置添加了一个图钉。我这样做是因为我想在更新位置时移除图钉,然后在新位置再次插入图钉。

这是我在 -(void)locationManager: didUpdateToLocation:fromLocation: 方法中编写的代码。

 [mapview removeAnnotation:myannotation]; 
 CLLocationCoordinate2D currentlocation;
 currentlocation.latitude=newLocation.coordinate.latitude;
 currentlocation.longitude=newLocation.coordinate.longitude;

 myannotation=[[[CSMapAnnotation alloc]initWithCoordinate:currentlocation annotationType:CSMapAnnotationTypeStart title:@"My Location"] autorelease];

 [mapview addAnnotation:myannotation];  

这里,myannotation 是我要添加的引脚,newLocation 是更新的位置,CSMapAnnotation 将返回注释视图。

问题是我的应用程序每次都崩溃。在崩溃之前,我能够在控制台上收到警告消息。这是消息:

“CSMapAnnotation 类的实例 0x182020 正在被释放,而键值观察者仍向其注册。观察信息正在泄漏,甚至可能被错误地附加到其他对象。”

所以,如果有人遇到同样的问题,请帮助...

4

3 回答 3

1

需要注意的几点:

  • MKMapView 已经有一个showsUserLocation属性,可以通过脉动的蓝点来为您跟踪用户的位置。如果您想在该位置单独设置一个图钉,您可以userLocation从地图视图中获取该属性。

  • 崩溃的错误可能是因为autorelease调用。修复它的最简单方法是使用属性创建myannotation一个retain属性,然后取出 autorelease 而不是myannotationuse self.myannotation

  • 不太清楚将“默认坐标设置为 0, 0”是什么意思。如果这些是纬度/经度,那么您将在英格兰格林威治放置一个大头针 :-) 您实际上并不需要不断添加和删除注释。您可以添加它们一次,然后根据需要调整它们的位置。

于 2009-08-10T18:53:47.340 回答
0

我认为它不喜欢您的自动释放标记进行 myannotation,当您将注释添加到地图时,它可能不会被保留,然后它只是解除分配并崩溃,这就是我通过查看您发布的代码所能想到的。希望能帮助到你

于 2009-08-10T13:21:00.507 回答
0

我刚刚遇到了同样的问题,它与注释的坐标有关。我已经忽略了 0,0,但由于某种原因,用户输入了 -180,-180(可能来自我们无法确定位置的设备?)

无论如何-一旦我开始忽略-180,-180,问题就消失了。希望这可以帮助。

于 2011-05-07T00:40:51.710 回答