未提示在应用程序中启用位置服务

And*_*rew 7 objective-c cllocationmanager cllocation ios

更新:这不是一个重复.我已经在info.plist中添加了所需的密钥,如我原始问题中所述,问题仍然存在.我已经尝试了各种组合的所有三个键.

在任何人感到不安之前,我已阅读了许多Apple Dev论坛帖子和堆栈溢出帖子,无法弄清楚为什么我的应用程序拒绝提示用户允许使用时授权.

我已将以下密钥添加到我的Info.plist文件中,并附带一个String值:

NSLocationWhenInUseUsageDescription
Run Code Online (Sandbox Code Playgroud)

然后我写了(在Swift和Obj-C中)应该提示用户的代码:

@property CLLocationManager *location;
...
@synthesize location;
...
location = [[CLLocationManager alloc] init];
location.delegate = self;

location.desiredAccuracy = kCLLocationAccuracyBest;
location.distanceFilter = kCLDistanceFilterNone;

[location requestWhenInUseAuthorization];
[location startUpdatingLocation];


I'm using the following CLLocationManagerDelegate methods.
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
- (void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
Run Code Online (Sandbox Code Playgroud)

这基本上是直接从Apple"LocateMe"示例代码中复制的.

无论我尝试什么样的各种序列或细微的变化,应用程序都不会提示允许授权.我已经使用switch语句来确定状态[CLLocationManager authorizationStatus],但不断收到"未确定"的响应.

if ([CLLocationManager locationServicesEnabled]) {
        switch ([CLLocationManager authorizationStatus]) {
            case kCLAuthorizationStatusAuthorizedAlways:
                NSLog(@"Always Authorized");
                break;
            case kCLAuthorizationStatusDenied:
                NSLog(@"Denied");
                break;
            case kCLAuthorizationStatusAuthorizedWhenInUse:
                NSLog(@"Authorized in Use");
                break;
            case kCLAuthorizationStatusNotDetermined:
                NSLog(@"Not Determined");
                break;
            case kCLAuthorizationStatusRestricted:
                NSLog(@"Restricted");
                break;
        }

    }
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.我正在运行带有iOS 8.1.2物理设备的Xcode 6.2(6C101)和用于测试的iOS 8.2(12D5452a)模拟器.

Ian*_*nce 1

我发现在您的 info.plst 文件中您不能使用隐私 - 位置使用描述密钥,您必须有一个名为 的密钥NSLocationWhenInUseUsageDescription和一个值。通过将此密钥添加到我的 info.plist 中,我能够使您的代码正常工作

在此输入图像描述

#import <MapKit/MapKit.h>

@interface ViewController ()

@property CLLocationManager * location;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _location = [[CLLocationManager alloc] init];

    self.location.delegate = self;
    self.location.desiredAccuracy = kCLLocationAccuracyBest;
    self.location.distanceFilter = kCLDistanceFilterNone;

    [_location requestWhenInUseAuthorization];
    [self.location startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)