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

时间:2011-05-03 16:21:26

标签: ios mapkit mkannotation

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

MapAnnotation已取消分配,而键值观察者仍在其中注册。观察信息被泄露,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置断点以在调试器中停止。这是当前的观察信息:

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

4 个答案:

答案 0 :(得分:30)

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

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

传递超出这些边界的值将导致自定义类被释放,从而为您提供您正在接收的错误。确保您为纬度和经度传递了正确的值。

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

答案 1 :(得分: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>

正如此处所指出的那样,是因为我在MKMapView中添加了一个带有无效坐标的MKAnnotation。

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

放置+ 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];
} 

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

相关问题