我正在使用CoreLocation Framework获取项目中的纬度和经度。
我已在我的.m文件中实现此委托方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
NSLog(@"Locations : %@", locations);
}
但是在iOS 5.0& 5.1,这种方法不是调用。 在iOS 6.0或更高版本中,它可以正常调用。 所以如何在iOS 5.0或更高版本中调用此方法。
答案 0 :(得分:2)
didUpdateLocations:
。如果您想支持这些ios版本,请使用已弃用的didUpdateToLocation:fromLocation
。即使它被弃用,它仍然适用于ios 6和7.这是最简单的解决方案。
您可以拥有两者的委托方法,但管理起来会变得更加复杂。如果您不需要在后台构建跟踪日志,那么您实际上并不需要didUpdateLocations:
创建它以节省电池电量,同时在后台运行时收集多个点。
答案 1 :(得分:0)
请参阅此答案...此方法适用于iOS 5(在iOS 6上已弃用)和旧版本。
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
适用于iOS 6及更高版本的此方法..
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
答案 2 :(得分:0)
参见:
正如您所看到的,locationManager:didUpdateLocations:
仅在iOS 6.0
及更晚版本中可用。
您始终可以从
获取最近更新的位置CLLocationManger's location
属性。
答案 3 :(得分:0)
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
在iOS 6中不推荐使用上述委托方法。
而不是这个,请使用:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations
此代码(以及pausesLocationUpdatesAutomatically)仅在XCode 4.5中编译(其中基本SDK为6)。
如果您想要定位6.0之前的iOS版本,请使用此宏
#define IOS_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
无论您在何处创建CLLocationManager
对象
if(IOS_VERSION_GREATER_THAN_OR_EQUAL_TO (@"6.0"))
{
locationManagerObj.pausesLocationUpdatesAutomatically = NO;
}
此处有更多详情: