Ios 接受提示后核心位置未更新
我正在使用核心位置框架来定位设备,一旦使用位置调用locationManager:didUpdateToLocation:fromLocation:方法,我就停止跟踪用户 然而,在我第一次启动应用程序时(从新安装)。当我向我的位置管理器发送startUpdatingLocation消息时,用户将收到接受或拒绝位置服务的警报 当我接受跟踪没有开始时,只有当我离开并再次调用startUpdatingLocation时回到该视图控制器时,通知才会开始进入 我正在实现locationManager:didChangeAuthorizationStatus:认为当用户接受(或拒绝)位置服务时会收到消息,但事实并非如此 一旦位置服务消息被取消,有人能告诉我更新位置的正确方向吗 谢谢 使用代码示例更新 我有一个单例类,它封装了我的逻辑,其思想是当请求用户位置时,对CLLocation的时间戳进行检查,如果它太旧,则发送开始跟踪消息,延迟加载我的CLLocationManager iVarIos 接受提示后核心位置未更新,ios,core-location,Ios,Core Location,我正在使用核心位置框架来定位设备,一旦使用位置调用locationManager:didUpdateToLocation:fromLocation:方法,我就停止跟踪用户 然而,在我第一次启动应用程序时(从新安装)。当我向我的位置管理器发送startUpdatingLocation消息时,用户将收到接受或拒绝位置服务的警报 当我接受跟踪没有开始时,只有当我离开并再次调用startUpdatingLocation时回到该视图控制器时,通知才会开始进入 我正在实现locationManager:di
-(void)startTracking{
if(!self.locationManager)
_locationManager = [[CLLocationManager alloc] init];
if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied){
[self invalidateUserLocation];
}else{
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
}
}
收到的新地点:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
_userLocation = [newLocation retain];
NSDictionary * info = [NSDictionary dictionaryWithObject:self.userLocation
forKey:@"userLocation"];
[[NSNotificationCenter defaultCenter] postNotificationName:kUserLocationFound
object:self
userInfo:info];
[self stopTracking];
}
停止跟踪:
-(void)stopTracking{
if(!self.locationManager)
return;
[self.locationManager stopUpdatingLocation];
self.locationManager.delegate = nil;
}
当我有一个需要用户位置的视图控制器时,我在我的单例对象上调用userLocation,如下所示。如果是最近的,则返回CLLocation,否则返回nil并重新开始。请注意,当我收到第一次更新时,我将停止跟踪。但第一次运行时,我得到了警报视图,没有任何跟踪
- (CLLocation*)userLocation
{
if(_userLocation.coordinate.latitude == 0 && _userLocation.coordinate.longitude == 0){
[self startTracking];
return nil;
}else{
NSDate* timeNow = [NSDate date];
NSTimeInterval interval = [timeNow timeIntervalSinceDate:_userLocation.timestamp];
if(interval >10)
[self startTracking];
return _userLocation;
}
}
您是否尝试从
CLLocationManagerDelegate
调用–locationManager:didChangeAuthorizationStatus:
我猜当视图控制器加载时,您会调用startTracking
。这是绕过了警报,要求如果它是好的。此时,将不会再次调用start locating消息,因此通过调用didChangeAuthorizationStatus
,您可以调用startTracking
方法
比如:
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusDenied) {
//location denied, handle accordingly
}
else if (status == kCLAuthorizationStatusAuthorized) {
//hooray! begin startTracking
}
}
如果情况并非如此,请告诉我。您是否在CLLocationManager实例上调用startUpdatingLocation?没错,我正在CLLocationManager实例上调用它。请显示一些代码,好吗?我刚刚将(CLAuthorizationStatus)状态设置为0,并且没有跟踪位置