百度IOS SDK若干问题解决办法

阅读提示:以下_mapView默认为BMKMapView的实例

问题:


1.百度地图首次无法加载或者显示不全:

(1)**申请key过程中填写的Bundle Identifier要包含ProjectName(从Bundle Identifier编辑栏中直接复制时不包含ProjectName)

(2)BMKMapView一定要添加到View上,例如

self.view = _mapView;

[self.view addSubView: _mapView];

(3)由于SDK还不完善,只能通过_mapView.showsUserLocation = YES;获取用户位置,此时也需要注意步骤2,不需要在界面上显示_mapView时只需要把frame的x坐标改为-320或者320即可,否则在其他地方显示_mapView时有可能出现显示不全的问题。

 (4)以上方法行不通,请对照百度demo的project和targets(active target)中的Build Settings与你的项目设置有什么不同,都照百度的改好,一般来说注意c++ Standard Library和Implicit Constant Conversions相关选项设置即可。

2.添加标注或覆盖层的视图在viewWillDisappear事件注意最好添加如下代码(标注会有缓存)

- (void)viewWillDisappear:(BOOL)animated
{
    NSArray* pAnnotations = [NSArray arrayWithArray:_mapView.annotations];
    [_mapView removeAnnotations:pAnnotations];//移除标注
    NSArray* pOverlays = [NSArray arrayWithArray:_mapView.overlays];
    [_mapView removeOverlays:pOverlays];//移除覆盖层
    
    [_mapView viewWillDisappear];
    _mapView.delegate = nil;
    [super viewWillDisappear:animated];
}

3.注意dealloc方法

- (void)dealloc {
    [super dealloc];
    if (_mapView) {
        [_mapView release];
        _mapView = nil;
    }
}
 在_mapView release之后,_mapView retainCount结果应为1(或者大于1),否则可能会报错,

说明:

BMKMapView第一次加载时,需要一段时间(有人说大概10秒)。
而BMKMapView.h里有如下解释

/**
 *当mapview即将被显式的时候调用,恢复之前存储的mapview状态。
 */
-(void)viewWillAppear;

/**
 *当mapview即将被隐藏的时候调用,存储当前mapview的状态。
 */
-(void)viewWillDisappear;

以往碰壁的经验发现,在每次执行

BMKMapView *_mapView = [[BMKMapView alloc]init];
后,_mapView retainCount值为2,由上推断,_mapView由BMKMapManager统一管理,在appDelegate.m值执行

BMKMapManager *_mapManager = [[BMKMapManager alloc]init];

后一个供全局使用的BMKMapView已经创建好,以后再创建BMKMapView实例时都会从这个全局BMKMapView中查看是否有缓存,无则创建,有则使用,所以在整个工程中BMKMapView第一次加载时必须添加到UIView在界面上显示,调用[_mapView viewWillAppear]时才能顺利完成加载,否则会中断造成显示不全或者更可怕的灾难。而加载完成后,保留缓存。所以离开标注视图后应注意移除标注。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值