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

来源:互联网 发布:淘宝快递费用价格表 编辑:程序博客网 时间:2024/06/04 18:55

阅读提示:以下_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]时才能顺利完成加载,否则会中断造成显示不全或者更可怕的灾难。而加载完成后,保留缓存。所以离开标注视图后应注意移除标注。


原创粉丝点击