iOS开发之开启定位后遇到的问题

大家在开发的时候肯定遇到过后台需要用户的位置信息,所以我们在前端要进行定位,代码很简单:

_locationManager = [[CLLocationManager alloc]init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[_locationManager startUpdatingLocation];

让你的viewController实现CLLocationManagerDelegate代理就可以了,然后就可以愉快的通过代理方法得到用户当前的位置了.

- (void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)locations
{
        CLLocation *lastLocation = [locations lastObject];
        CLLocationCoordinate2D coordinate =lastLocation.coordinate;
        _latitude = coordinate.latitude;
        _longitude = coordinate.longitude;
        [manager stopUpdatingLocation];   
}


然后把得到的经纬度post给后台就可以了!

难道真的就这么简单就OK 了嘛?当然不是.在我最近做的项目中就需要这样一个位置信息,然后根据位置信息得到附近用户的列表,理论上这样绝对没问题,可是拿到实际项目中就会出现一个奇怪的问题.什么问题呢?-----请求得到的数据重复

和后台人员讨论过了,也测试过接口,当然不是接口的问题,然后我就开始苦逼的打断点找问题,到底是哪里出现错误了,网络请求的方法明明只调用了一次,可是得到的数据展现到界面上却是实际数据的2 倍.

很快,问题找到了,是因为上面的那个代理方法走了两次!我网络请求的代码写在这个代理方法里面肯定会请求两次啊,数据不重复才乖呢.BUT [manager stopUpdatingLocation];    这句代码不是让定位停止了嘛,怎么会走两次代理方法呢?查了很多资料,最后终于搞明白了.

原来是第一次使用定位的时候,先走一次代理方法返回一个粗略的当前位置,虽然让定位停止但实际并没有停止,而是又走了第二次,返回一个准确的位置之后才停止.问题终于搞明白了,所以也就可以很容易的解决了,给它加一个标志_isLoc,通过判断_isLoc的值控制代理方法中的网络请求只请求一次,OK解决了!

开发项目的时候总会出现各种问题,把自己的问题分享出来,希望下次大家遇到这个问题可以少走点儿弯路!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值