美文网首页三方管理iOS DeveloperiOS 开发
IOS开发中使用高德地图所遇到的问题

IOS开发中使用高德地图所遇到的问题

作者: Hither | 来源:发表于2016-02-17 10:13 被阅读9661次

    A页面上放一个UITableView,它的每个单元格是不同药店的信息,点击以后会跳转到B页面,查看到相关药店的路线图 和 导航。最开始在B负责地图的一系列创建,程序没有问题,然而当我不断在这两个页面之间进行切换的时候,问题来了:程序崩溃 原因是内存泄露。

    解决的办法:A页面生成一个mapView,然后大家共用它,而不是每次点击单元格都创建一个地图。因为A页面和B页面切换速度过快,地图绘制是很耗时间的,地图还没有创建出来就退出,有时候就会导致内存泄露-->crash。

    在A页面进行地图的创建 但不设置代理!

    @property (nonatomic, strong) MAMapView *mapView;
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        medicineShopModel *model = dataArray[indexPath.row];
        MapViewController *map = [[MapViewController alloc]init];
    //在点击单元格的时候将上面创建的mapView赋值给B页面的声明mapView。
        map.mapView = self.mapView;
    //将模型中的经纬度 分别赋值给map对象的属性
        map.lt = model.x;
        map.at = model.y;
        [self.navigationController pushViewController:map animated:YES];
    }
    
    //初始化mapView
    - (void)initMapView
    {
        self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
    }
    

    接下来对B页面进行修改

    //首先声明如下属性
    @property (nonatomic,assign) CGFloat at;
    @property (nonatomic,assign) CGFloat lt;
    @property (nonatomic,strong) MAMapView *mapView;
    //为该页面的mapView设置frame,然后设置各种代理 遵循协议实现方法
    self.mapView.frame = CGRectMake(0, 64, WIDTH, HEIGHT/2-50);
    myLocationManager.delegate = self;
    self.mapView.delegate = self;
    search = [[AMapSearchAPI alloc]initWithSearchKey:@"2b5443e0ea031a20891d4bb8369a4a77" Delegate:self];
    

    相关文章

      网友评论

      • 0无敌小宋0:这就是单例个地图吧
        Hither:@0无敌小宋0 什么意思?
        0无敌小宋0:我是一个tab的2个地图页面,代理我该怎么设置呢,2个页面切换地图代理失效了
        Hither:@0无敌小宋0 嗯
      • Hither:Key出问题不会提示。 会在你真机测试弹框invalid user scode
        f178605cf67a:@一个不放弃的人 真机上没有弹框
      • f178605cf67a:2016-07-08 09:30:29.745 XQCProject[619:183000] CUICatalog: Invalid asset name supplied:
        2016-07-08 09:30:33.866 XQCProject[619:183070] [MAMapKit] INVALID_USER_SCODE
        button 搜索内容
        请求失败: Error Domain=AMapSearchErrorDomain Code=1008 "INVALID_USER_SCODE" UserInfo={NSLocalizedDescription=INVALID_USER_SCODE} 这是我在真机跑,点击搜索后,工程下面出现的所有描述
        f178605cf67a:@一个不放弃的人 嗯,好的
        Hither:你只有去高德德开发社区问下。 没代码我不知道具体问题
      • f178605cf67a:UserInfo={NSLocalizedDescription=INVALID_USER_SCODE} 出现了这个,是key的问题吧
        MAMapServices.sharedServices().apiKey = kGaoDeKey
        AMapSearchServices.sharedServices().apiKey = kGaoDeKey 再请教下,这两个key是一样的么,我怎么找不到search的key,在申请key的时候,只有一个key,我顿时懵逼了

        Hither:等下我看下
        f178605cf67a:@一个不放弃的人 那key就没问题,怎么请求数据的时候还是失败呢
        Hither:对。两个是用的同一个
      • f178605cf67a:准确说,请求失败回调 请求失败: %@ Error Domain=AMapSearchErrorDomain Code=1008 "INVALID_USER_SCODE"
        Hither:真机测试下。 看会不会弹框显示invalid user scode 如果有。 就一定是app key 出问题。失效了
        Hither:应该是app key出问题了
      • f178605cf67a:不知版主在不在,为什么我集成好之后,走到搜索时,程序只走搜索失败回调,求指导
        Hither:真机测试下。 看会不会弹框显示invalid user scode 如果有。 就一定是app key 出问题。失效了
        f178605cf67a:@一个不放弃的人 程序压根不走成功方法,发起搜索时,它直接走 请求失败 的回调
        Hither:在成功那个地方打个断点。看看。 因为没有看到你具体代码。 只能通过调试
      • 雾帆岛:ViewController不是不能作为属性或成员变量的吗?
        Hither:@雾帆岛 哟西
        雾帆岛:@hither 翔哥说的不可以 他说ViewController作为成员 视图呈现的时候会出问题
        Hither:@雾帆岛 可以的 比如你要跳转到一个ViewController 这个时候不就是把他定义成成员变量了么

      本文标题:IOS开发中使用高德地图所遇到的问题

      本文链接:https://www.haomeiwen.com/subject/tgfmkttx.html