这两天弄一个地图软件的时候遇到一个特别奇怪的问题,Annotation添加不上,报下面的一个警告:
An instance 0x5bd49f0 of class MapAnnotation 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 0x5e3e310> (
<NSKeyValueObservance 0x5e3e1c0: Observer: 0x5b22dc0, Key path: coordinate, Options: <New: NO, Old: NO, Prior: YES> Context: 0x0, Property: 0x5e3db30>
)
然后我在网上查这种问题的原因,都说这是一个内存问题,于是我就从内存下手,可查来查去没发现问题所在,并且很奇怪,一个结构体变量怎么会导致内存问题?
于是我开始做了几次尝试:
1、我把地图coordinate用静态的数据,CLLocationCoordinate2DMake(39.1,116.1);没有报错,开始怀疑是不是因为doubleValue造成的,然后开始做下一步尝试。
2、因为我是通过解析json得到的,每个数据是一个NSDictionary,于是我自己按那个格式定义了一个NSDictionary,没有报错,当时就蒙了,特别奇怪。
期间我发现MKMapView addAnnotation一直失败,我也查过相关的资料,仍然无果。
但是另一个偶然的疏忽,让真相浮出了水面,原来我把经度和纬度搞反了,这是由于我的惯性思维导致,我一直以为都是把x作为纬度,y作为经度。。。
以后遇到这种问题的时候,首先检查两个问题:
1、自定义的MKAnnotation,是否满足MKAnnotation协议。
2、经度和纬度是否超出边界。