• 百度地图经常崩溃的问题


    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的时候开始处理任务队列来完成项目需求

  • 相关阅读:
    vue-cli 2.x 项目优化之:引入本地静态库文件
    关联本地文件夹到 GitLab 项目
    react 子组件访问父组件的方法
    vue 和 react 组件间通信方法对比
    mobx-state-tree 知识点
    vue 下实现 echarts 全国到省份的地图下钻
    TweenMax 动画库,知识点
    mobx 知识点
    highcharts 知识点
    dependencies、devDependencies、webpack打包 的区别与联系
  • 原文地址:https://www.cnblogs.com/coolwxb/p/bai-du-de-tu-jing-chang-beng-kui-de-wen-ti.html
Copyright © 2020-2023  润新知