Objective C locationManager 无法获取当前位置,总是返回 0

Posted

技术标签:

【中文标题】Objective C locationManager 无法获取当前位置,总是返回 0【英文标题】:Objective C locationManager cannot get current location, always returns 0 【发布时间】:2015-05-26 14:26:07 【问题描述】:

能否请您查看以下代码,它确实尝试使用代表的 locationManager,并尝试返回设备的当前位置。

但总是返回0(允许的位置权限)

.m

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

if(IS_OS_8_OR_LATER) 
    [self.locationManager requestAlwaysAuthorization];



CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

if (status == kCLAuthorizationStatusAuthorizedAlways) 
  // TODO: Handle status authorized always


 else if (status == kCLAuthorizationStatusNotDetermined) 
  // TODO: Handle status not determined


 else 
  // TODO: Handle other







- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

  //NSLog(@"newLocation: %@", newLocation);



-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

    //NSLog(@"Error: %@",[error description]);


info.plist

<key>NSLocationAlwaysUsageDescription</key>
<string>We would like to use your location.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We would like to use your location.</string>

【问题讨论】:

你对你的 locationManager 有强引用吗? 是 @property (strong, nonatomic) CLLocationManager *locationManager;在 .h 上声明 返回0是什么意思? 你在模拟器上运行吗? didUpdateToLocation 已弃用,您应该改用 didUpdateLocations 【参考方案1】:

请尝试在 requestAlwaysAuthorization 之后调用 startUpdatingLocation。并使用下面的 didUpdateLocations 委托方法。

if(IS_OS_8_OR_LATER) 
    [self.locationManager requestAlwaysAuthorization];


[self.locationManager startUpdatingLocation];


- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

        _currentLocation = [locations objectAtIndex:0]; 
        //do your stuff with the location

    

对于模拟器测试 - 选择模拟器并转到调试 -> 位置 -> Apple 或 City Run

对于设备测试如果您获得当前位置,请查看地图。有时设备由于在屋内而无法获取当前位置。

【讨论】:

以上是关于Objective C locationManager 无法获取当前位置,总是返回 0的主要内容,如果未能解决你的问题,请参考以下文章

efffective Objective-C 学习笔记

如何自学objective c语言?

objective-c入门

Objective-C和C的区别

objective-c与C++的区别

在 Mac OS X 上结合 Objective-C 和 C/C++