iPhone自定义地图注释中的警告



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

当键值观察者仍然注册时,

MapAnnotation被释放。观测信息被泄露,甚至可能被错误地附加到其他对象上。在NSKVODeallocateBreak上设置一个断点,以便在调试器中停止。下面是当前的观测信息:

我没有在代码中使用KVO,因此无法理解为什么我收到这些警告

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

  • (- 90,90) for late
  • (-180, 180) for Long

在这些边界之外传递值将导致自定义类被释放,从而给您收到的错误。确保为Latitude和Longitude传递正确的值。

如果苹果传递一个边界错误,而不是一个早期发布错误,那就太好了。这将节省我大约5个小时的时间

我得到了和你一样的错误:

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

我为我的Place类创建了一个类别和

#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];
} 

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

您是否在将注释添加到MapView之前自动释放注释?

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

最新更新