CLLocationManager startUpdatingLocation不调用locationManager:didUpdateLocations:或locationManager:didFailWithError:

我想在我的iOS项目中使用CLLocationManager框架来访问用户的位置,但是当我打电话

 [locationManager startUpdatingLocation] 

locationManager:didUpdateLocations:locationManager:didFailWithError:都被调用。

 //myViewController.h @interface myViewController : UITableViewController <CLLocationManagerDelegate> @end //myViewController.m @implementation myViewController{ CLLocationManager *locationManager; } //edit - (void)viewDidLoad { [super viewDidLoad]; locationManager = [[CLLocationManager alloc] init]; } //finish edit -(void)getLocation { locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [errorAlert show]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *newLocation = locations[[locations count] -1]; CLLocation *currentLocation = newLocation; NSString *longitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]; NSString *latitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]; if (currentLocation != nil) { NSLog(@"latitude: %@", latitude); NSLog(@"longitude: @"%@", longitude); }else { UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [errorAlert show]; } } @end 

尽pipe它在文档中说了什么,但都不会调用委托方法:

调用这个方法会导致位置pipe理器获得一个初始的位置修正(可能需要几秒钟的时间),并通过调用它的locationManager:didUpdateLocations:通知你的委托locationManager:didUpdateLocations: method […]除了你的委托对象locationManager:didUpdateLocations:方法,它还应该实现locationManager:didFailWithError:方法来响应潜在的错误。

不知道如何debugging这个问题。

谢谢,

JA

在这里输入图像说明 只需将其添加到info.plist

NSLocationAlwaysUsageDescription —我需要位置

NSLocationWhenInUseUsageDescription —我需要位置

隐私 – 位置使用说明—我需要位置

  locationManager = [[CLLocationManager alloc] init]; locationManager.delegate=self; locationManager.desiredAccuracy=kCLLocationAccuracyBest; locationManager.distanceFilter=kCLDistanceFilterNone; [locationManager requestWhenInUseAuthorization]; [locationManager startMonitoringSignificantLocationChanges]; [locationManager startUpdatingLocation]; 

现在它会确定地调用你的didUpdateToLocation。

更多细节请点击这里

定位服务工作有点不同,从iOS 8开始。

主要是,你需要添加一个关键NSLocationWhenInUseUsageDescription到你的Info.plist文件中,并添加一个描述为什么你的应用需要Location,比如“Location needed …”。

请注意,您可能还需要检查iOS版本。 只有iOS 8和更高版本的位置pipe理器才能requestWhenInUseAuthorization调用。

以下链接显示更多详情: http : //nevan.net/2014/09/core-location-manager-changes-in-ios-8/

祝你好运!

在iOS 8.0中,您需要首先调用-[CLLocationManager requestWhenInUseAuthorization ]-[CLLocationManager requestAlwaysAuthorization]以便用户被要求为您的应用授予使用该位置的权限。

您强烈需要检查您是否在主线程上初始化CLLocationManager。 在其他情况下,你将不会得到updateLocation事件。

我无法在苹果文档中find这样的信息,但无论如何它对我都有效。

你需要把下面的东西添加到你的项目中,

  1. 在你的项目plist添加这些东西:

    1. Key: NSLocationAlwaysUsageDescription Type:String
    2. Key: NSLocationWhenInUseUsageDescription Type:String
  2. 在带有[locationManager startUpdatingLocation]的.m文件中添加这个条件:

     if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) [locationManager requestAlwaysAuthorization];` 

那么只有你的CLLocationManager委托方法会被调用。

我认为你应该检查这个链接。你在声明时不保留位置pipe理器对象。

请给财产给你对象@属性(非primefaces,强大)

为什么在iPhone SDK 4.0中没有调用CLLocationManager委托?