【问题标题】:Warning in Custom Map Annotations iPhone自定义地图注释 iPhone 中的警告
【发布时间】:2011-05-03 16:21:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios mapkit mkannotation


    【解决方案1】:

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

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

    传递超出这些范围的值将导致自定义类被释放,从而导致您收到错误。确保您传递了正确的纬度和经度值。

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

    【讨论】:

    • iOS7 中问题依然存在。我有点无助,因为我使用的是 ARC,无法想象为什么我的地图注释发布得太早了。我很高兴我找到了你的答案! +1
    【解决方案2】:

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

    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。

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

    Place+MKAnnotation.m

    我创建了我的 Place 类的一个类别,并且

    #import "Place.h"
    #import <MapKit/MapKit.h>
    
    @interface Place (MKAnnotation) <MKAnnotation>
    - (BOOL)coordinateIsValid;
    ...
    @end
    

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

    【讨论】:

      【解决方案3】:

      修复它。我在注释中使用了错误的纬度和经度,我已经更改了相同的内容,现在一切似乎都很完美,警告也消失了。

      【讨论】:

      • 您能否提供更多详细信息来说明您为解决此问题所做的工作?
      • @KronoS 我使用了错误的纬度和经度对,这是不现实的,我使用了正确的值并且再也没有看到该警告。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多