2011-05-03 34 views
7

我在iPhone中使用地图视图的自定义地图注记类。每当我从导航栏堆栈弹出我的地图视图时,我通常会在控制台中看到一些警告。自定义地图注释中的警告iPhone

MapAnnotation被释放,而关键值观察者仍然注册它。观察信息被泄露,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置一个断点,在调试器中停止。下面是当前观测信息:

在我的代码,我不使用国际志愿者组织,因此无法理解为什么我将它添加到的MapView之前接收这些警告

回答

30

纬度和经度具有不同的界限:

  • (-90,90),用于纬度
  • (-180,180),用于长

传递这些边界之外的值将导致自定义类被解除分配,因此会给您提供您收到的错误。确保您传递的是经纬度的正确值。

如果Apple为此传递了一个边界错误而不是早期发布错误,那将非常好。这将已经救了我约5个小时的时间

+0

问题仍然存在于iOS7中。自从我使用ARC以来,我有点无助,并且无法对我的地图注释为什么发布得太早进行映射。我很高兴我找到了你的答案! +1 – 2014-01-15 12:15:11

0

你自动释放您的注解?

如果是这样,请尝试分配它,将其添加到MapView,然后释放它。

1

修正了它。我在注释中使用了一对错误的经纬度,我改变了一样,现在一切似乎都很完美,警告也消失了。

+0

您能否提供一些更详细的信息来解决您的问题? – KronoS 2012-04-18 16:51:22

+0

@KronoS我使用了一对不正确的经纬度,我使用了正确的值并且再也没有看到那个警告。 – sandy 2012-04-20 15:42:17

7

我得到了同样的错误,你:

An instance 0xa975400 of class xxxxxx was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info: 
<NSKeyValueObservationInfo 0xa980eb0> (
<NSKeyValueObservance 0xa980e70: Observer: 0xa94f8a0, Key path: coordinate, Options: <New: NO, Old: NO, Prior: YES> Context: 0x0, Property: 0xa980ef0> 

如这里指出,这是因为我加入了MKAnnotation使用无效协调,以引起一个MKMapView。

我的解决方案是创建一个函数来检查坐标有效。

广场+ MKAnnotation.m

我创造了我的地方类的类别和

#import "Place.h" 
#import <MapKit/MapKit.h> 

@interface Place (MKAnnotation) <MKAnnotation> 
- (BOOL)coordinateIsValid; 
... 
@end 

广场+ MKAnnotation.m

@implementation Place (MKAnnotation) 

- (BOOL)coordinateIsValid 
{ 
    return CLLocationCoordinate2DIsValid(CLLocationCoordinate2DMake([self.latitude doubleValue],[self.longitude doubleValue])); 

} 
... 
@end 

我只加了注释在我的ViewController如果该坐标是有效的。

if([p coordinateIsValid]) { 
    [self.mapView addAnnotation:p]; 
}