在iPhone地图上移动MKPinAnnotation时出现问题

时间:2009-08-10 11:00:51

标签: iphone mapkit

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

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

这是我写的代码 - (void)locationManager:didUpdateToLocation:fromLocation:method。

 [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正被释放,而键值观察者仍然在其中注册。观察信息被泄露,甚至可能被错误地附加到其他对象。”

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

3 个答案:

答案 0 :(得分:1)

需要注意的一些事项:

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

  • 崩溃的错误可能是因为autorelease调用。解决问题的最简单方法是使myannotation具有retain属性的属性,然后取出自动发布,而不是myannotation使用self.myannotation

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

答案 1 :(得分:0)

我认为它不喜欢myannotation的autorelease标签,当你将注释添加到地图时它可能没有被保留,然后它只是解除分配并崩溃,这就是我能从思考代码中想到的你发布了。希望它有所帮助

答案 2 :(得分:0)

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

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