san*_*ndy 7 mapkit mkannotation ios
我在iPhone中使用自定义地图注释类进行地图视图.每当我从导航栏堆栈弹出我的地图视图时,我通常会在控制台中看到一些警告.
MapAnnotation已取消分配,而键值观察者仍在其中注册.观察信息被泄露,甚至可能被错误地附加到其他物体上.在NSKVODeallocateBreak上设置断点以在调试器中停止.这是目前的观察信息:
我没有在我的代码中使用KVO,因此无法理解为什么我收到这些警告
Jam*_*rtz 30
纬度和经度有不同的界限:
传递超出这些边界的值将导致自定义类被释放,从而为您提供您正在接收的错误.确保您为纬度和经度传递了正确的值.
如果Apple为此传递了一个边界错误而不是早期发布错误,那将是非常好的.这将为我节省大约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>
Run Code Online (Sandbox Code Playgroud)
正如这里指出的那样,它是因为我向MKMapView添加了一个带有无效坐标的MKAnnotation.
我的解决方案是创建一个检查坐标有效的函数.
广场+ MKAnnotation.m
我创建了一个我的Place类的类别
#import "Place.h"
#import <MapKit/MapKit.h>
@interface Place (MKAnnotation) <MKAnnotation>
- (BOOL)coordinateIsValid;
...
@end
Run Code Online (Sandbox Code Playgroud)
广场+ MKAnnotation.m
@implementation Place (MKAnnotation)
- (BOOL)coordinateIsValid
{
return CLLocationCoordinate2DIsValid(CLLocationCoordinate2DMake([self.latitude doubleValue],[self.longitude doubleValue]));
}
...
@end
Run Code Online (Sandbox Code Playgroud)
如果坐标有效,我只在ViewController中添加注释.
if([p coordinateIsValid]) {
[self.mapView addAnnotation:p];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |