And*_*rew 4 xcode objective-c cllocationmanager ios swift
我将我的对象设置为locationManager的委托,并调用didChangeAuthorizationStatus方法,它执行此操作:
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if status == CLAuthorizationStatus.AuthorizedWhenInUse {
self.locationManager.startUpdatingLocation()
}
}
Run Code Online (Sandbox Code Playgroud)
我也有这个方法,在这之后永远不会被调用:
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
if locations.count == 0 {
return
}
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
有什么想法可能没有被调用?我认为被解除分配的对象是一个选项,但是当它达到authorizationStatus方法时它也会被释放.
tim*_*son 16
这对于答案来说已经很晚了,但是当我遇到同样的问题(didChangeAuthorizationStatus被调用但没有didUpdateLocations)时,我偶然发现了这一点.当然,这不是代码相关的东西,而是我在没有位置设置的模拟器中进行测试.因此,从未找到该位置,导致didUpdateLocations从未被调用.
要解决这个问题......在模拟器中转到Debug -> Location-> <choose location>.
编辑还应该注意,locationManager:didFailWithError:如果未在模拟器中设置位置,将运行,如您所期望的那样.
它也可以在iOS 10和iOS 11中使用,
建立财产的CLLocationManager使用强并添加CLLocationManagerDelegate
@property (strong, nonatomic) CLLocationManager *locationManager;
Run Code Online (Sandbox Code Playgroud)
将以下属性添加到您的info.plist文件中
Privacy - Location When In Use Usage Description
Privacy - Location Always Usage Description
Privacy - Location Usage Description
Run Code Online (Sandbox Code Playgroud)
将以下方法添加到您的.m文件中
-(void)getCurrentLocation
{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate=self;
self.locationManager.desiredAccuracy=kCLLocationAccuracyBest;
self.locationManager.distanceFilter=kCLDistanceFilterNone;
[self.locationManager requestWhenInUseAuthorization];
[self.locationManager startMonitoringSignificantLocationChanges];
[self.locationManager startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)
并调用 [self getCurrentLocation] 方法。
| 归档时间: |
|
| 查看次数: |
10420 次 |
| 最近记录: |