我正在构建一个跟踪地图上用户位置的应用。我可以轻松插入一个引脚,但当位置发生变化时,应用程序退出。
我在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正被释放,而键值观察者仍然在其中注册。观察信息被泄露,甚至可能被错误地附加到其他对象。”
所以,如果有人遇到同样的问题,请帮助...
答案 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,问题便消失了。 希望这有帮助。