zoukankan      html  css  js  c++  java
  • 百度地图经常崩溃的问题

    title: 百度地图经常崩溃的问题
    date: 2015-11-14 11:23:45
    categories: IOS

    tags: 地图无忧

    小小程序猿
    我的博客:http://daycoding.com

    问题:

    百度地图文档上说是要在使用地图的viewController的声明周期函数中调用以下方法:

    (void)viewWillAppear:(BOOL)animated      
    {      
        [_mapView viewWillAppear];      
        _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放      
    }      
    -(void)viewWillDisappear:(BOOL)animated      
    {      
            [_mapView viewWillDisappear];      
          _mapView.delegate = nil; // 不用时,置nil      
    }
    

    项目需求:

    开启协同长连接,接收web传来的操作,并在地图上进行操作,但是如果不在地图mapview所在的controller中就无法使用mapview的回调函数(例如:创建Annotation),所以我在mapviewcontroller的-(void)viewWillDisappear:(BOOL)animated中注释了_mapView.delegate = nil;这句话,这样如果接收到web传来的操作就会在地图上进行绘制。

    但是如此操作几次,当从其他controller跳转到mapViewController的时候程序会经常报同样的错
    日志:

     frame #0: 0x3239c5b8 GLEngine`gleRunVertexSubmitARM + 1804
        frame #1: 0x3239a40a GLEngine`gleSetVertexArrayFunc + 118
        frame #2: 0x32357066 GLEngine`gleDrawArraysOrElements_ExecCore + 666
        frame #3: 0x32355de8 GLEngine`glDrawElements_ACC_Exec + 468
        frame #4: 0x00b98b86 libglInterpose.dylib`draw_elements(__GLIContextRec*, unsigned int, int, unsigned int, void const*) + 234
        frame #5: 0x323d7f92 OpenGLES`glDrawElements + 38
        frame #6: 0x0044c5f8 MPC`_baidu_framework::CGridLayer::DrawGridSurface(_baidu_framework::GridDrawLayerMan*, _baidu_framework::GridDrawObj*, _baidu_framework::CMapStatus&) + 308
        frame #7: 0x0044ae4e MPC`_baidu_framework::CGridLayer::Draw(_baidu_framework::CMapStatus&, _baidu_framework::DRAW_TYPE) + 726
        frame #8: 0x004c3d70 MPC`_baidu_framework::CVMapControl::Draw() + 344
        frame #9: 0x00461394 MPC`-[MapController draw] + 68
        frame #10: 0x00463f3c MPC`__20-[MapView drawFrame]_block_invoke + 812
    

    在网上查找答案和百度官方文档上说明,大部分的解释是说要在当前显示的controller中进行openGL的画图操作,百度文档也有类似说明:

    百度地图相关说明

    //app在前后台切换时,需要使用下面的代码停止地图的渲染和openGL的绘制:
    - (void)applicationWillResignActive:(UIApplication *)application {
        [BMKMapView willBackGround];//当应用即将后台时调用,停止一切调用opengl相关的操作
    }
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        [BMKMapView didForeGround];//当应用恢复前台状态时调用,回复地图的渲染和opengl相关的操作
    }
    

    所以分析原因是和我注释掉得代码有关系,将注释去掉,判断当前controller状态,将接收到的web操作放到任务队列当中,当controller调用方法(void)viewWillAppear:(BOOL)animated的时候开始处理任务队列来完成项目需求

  • 相关阅读:
    将博客搬至CSDN
    JDBC
    Java刷题常用API
    Java的反射机制
    Java的IO流
    Docker原理:Cgroup
    Docker原理:Namespace
    Anaconda软件安装使用问题
    初步了解Unix系统的I/O模式
    深入理解索引和AVL树、B-树、B+树的关系
  • 原文地址:https://www.cnblogs.com/coolwxb/p/bai-du-de-tu-jing-chang-beng-kui-de-wen-ti.html
Copyright © 2011-2022 走看看